@@ IDENTITY после оператора INSERT всегда возвращает 0

Мне нужна функция, которая выполняет оператор 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

Ответы на вопрос(13)

Ваш ответ на вопрос