MySql Last Insert ID, Connector .net

Я использую MySql Connector .net, и мне нужно получить идентификатор вставки, сгенерированный последним запросом . Теперь я предполагаю, что возвращаемое значение MySqlHelper.ExecuteNonQuery должно быть последним идентификатором вставки, но оно просто возвращает 1.

Я использую следующий код:

int insertID = MySqlHelper.ExecuteNonQuery(Global.ConnectionString, 
"INSERT INTO test SET var = @var", paramArray);

Однако insertID всегда 1. Я попытался создать MySql-соединение и открыть / закрыть вручную, что привело к такому же поведению

13
задан Splatbang 15 December 2011 в 09:30
поделиться

1 ответ

Я знаю, что это - старое сообщение, но я сталкивался с той же проблемой как Snorvarg. Используя MySqlHelper и использование строки подключения вместо объекта Соединения (чтобы позволить MySqlHelper использовать организацию пула подключений), ИЗБРАННЫЙ LAST_INSERT_ID () часто давал бы мне идентификатор предыдущего запроса, который выполнялся, или другие времена, это возвратит нуль. Я должен был бы тогда звонить ИЗБРАННЫЙ LAST_INSERT_ID () во второй раз для получения корректного идентификатора.

Мое решение состояло в том, чтобы инкапсулировать все между запросом, это выполняется, и вызов ИЗБРАННЫЙ LAST_INSERT_ID () в TransactionScope. Это вынуждает MySqlHelper придерживаться одного соединения вместо того, чтобы открыть два отдельных соединения.

Так:

string sql = "INSERT INTO games (col1,col2) VALUES (1,2);");
string connectionString = "some connection string";

using (TransactionScope scope = new TransactionScope)
{
    int rowsAffected = MySqlHelper.ExecuteNonQuery(connectionString, sql);    
    object id = MySqlHelper.ExecuteScalar(connectionString, "SELECT LAST_INSERT_ID();");
    scope.Complete();
}
0
ответ дан 1 December 2019 в 17:10
поделиться
Другие вопросы по тегам:

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