Мне нужна функция, которая выполняет оператор INSERT для базы данных и возвращает первичный ключ Auto_Increment. У меня есть следующий код C #, но, хотя оператор INSERT работает нормально (я вижу запись в базе данных, PK генерируется правильно и строки == 1), значение id всегда равно 0. Любые идеи о том, что может происходить неправильно?
public int ExecuteInsertStatement(string statement)
{
InitializeAndOpenConnection();
int id = -1;
IDbCommand cmdInsert = connection.CreateCommand();
cmdInsert.CommandText = statement;
int rows = cmdInsert.ExecuteNonQuery();
if (rows == 1)
{
IDbCommand cmdId = connection.CreateCommand();
cmdId.CommandText = "SELECT @@Identity;";
id = (int)cmdId.ExecuteScalar();
}
return id;
}
private void InitializeAndOpenConnection()
{
if (connection == null)
connection = OleDbProviderFactory.Instance.CreateConnection(connectString);
if(connection.State != ConnectionState.Open)
connection.Open();
}
В ответ на ответы я попробовал:
public int ExecuteInsertStatement(string statement, string tableName)
{
InitializeAndOpenConnection();
int id = -1;
IDbCommand cmdInsert = connection.CreateCommand();
cmdInsert.CommandText = statement + ";SELECT OID FROM " + tableName + " WHERE OID = SCOPE_IDENTITY();";
id = (int)cmdInsert.ExecuteScalar();
return id;
}
но теперь я получаю сообщение об ошибке «Обнаружены символы после завершения оператора SQL»
Я использую базу данных MS Access с подключением OleDb, Provider = Microsoft.Jet.OLEDB.4.0