Получите идентификатор вставленной строки с помощью C#

23
задан Jim Fell 31 May 2016 в 17:07
поделиться

3 ответа

[Редактирование: добавленный "выбор" перед ссылками на last_insert_id ()]

Что относительно того, чтобы работать" select last_insert_id();" за Вашей вставкой?

MySqlCommand comm = connect.CreateCommand();
comm.CommandText = insertInvoice;
comm.CommandText += "\'" + invoiceDate.ToString("yyyy:MM:dd hh:mm:ss") + "\', "  
    + bookFee + ", " + adminFee + ", " + totalFee + ", " + customerID +  ");";
    + "select last_insert_id();"

int id = Convert.ToInt32(comm.ExecuteScalar());
<час>

Редактирование: Как duffymo упомянутый, Вы действительно были бы хорошо обслужены с помощью параметризированных запросов как это .

<час>

Редактирование: , Пока Вы не переключаетесь на параметризованную версию, Вы могли бы найти мир со строкой. Формат:

comm.CommandText = string.Format("{0} '{1}', {2}, {3}, {4}, {5}); select last_insert_id();",
  insertInvoice, invoiceDate.ToString(...), bookFee, adminFee, totalFee, customerID);
22
ответ дан Michael Haren 29 November 2019 в 01:07
поделиться

Это беспокоит меня, чтобы видеть, что кто-либо берет Дату и хранит его в базе данных как Строка. Почему бы не тип столбца отражают действительность?

я также удивлен видеть, что SQL-запрос создается с помощью конкатенации строк. Я - Java-разработчик, и я не знаю C# вообще, но я задался бы вопросом, не было ли обязательного механизма вроде java.sql. PreparedStatement где-нибудь в библиотеке? Это рекомендуется для принятия мер против атак с использованием кода на SQL. Другое преимущество является возможными выигрышами в производительности, потому что SQL может анализироваться, проверяться, кэшироваться однажды и снова использоваться.

0
ответ дан duffymo 29 November 2019 в 01:07
поделиться

На самом деле метод ExecuteScalar возвращает первый столбец первой строки возвращаемого DataSet. В Вашем случае Вы только делаете Вставку, Вы на самом деле не запрашиваете данных. Необходимо запросить scope_identity () после того, как Вы - вставка (это - синтаксис для SQL Server), и затем у Вас будет свой ответ. Посмотрите здесь:

Связь

РЕДАКТИРОВАНИЕ: , Поскольку Michael Haren указал, Вы упомянули в своем теге, Вы используете MySql, используете last_insert_id (); вместо scope_identity ();

0
ответ дан BFree 29 November 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: