Я использую MySql Connector .net, и мне нужно получить идентификатор вставки, сгенерированный последним запросом . Теперь я предполагаю, что возвращаемое значение MySqlHelper.ExecuteNonQuery
должно быть последним идентификатором вставки, но оно просто возвращает 1.
Я использую следующий код:
int insertID = MySqlHelper.ExecuteNonQuery(Global.ConnectionString,
"INSERT INTO test SET var = @var", paramArray);
Однако insertID
всегда 1. Я попытался создать MySql-соединение и открыть / закрыть вручную, что привело к такому же поведению
Я знаю, что это - старое сообщение, но я сталкивался с той же проблемой как 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();
}