@@ IDENTITY nach INSERT-Anweisung gibt immer 0 zurück

Ich benötige eine Funktion, die eine INSERT-Anweisung für eine Datenbank ausführt und den Auto_Increment-Primärschlüssel zurückgibt. Ich habe den folgenden C # -Code, aber während die INSERT-Anweisung einwandfrei funktioniert (ich kann den Datensatz in der Datenbank sehen, die PK wird korrekt generiert und die Zeilen == 1), ist der ID-Wert immer 0. Irgendwelche Ideen, was möglicherweise vor sich geht falsch?

    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();
    }

Als Antwort auf die Antworten habe ich versucht:

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;
    }

aber ich erhalte jetzt die Fehlermeldung "Zeichen nach Ende der SQL-Anweisung gefunden"

Ich verwende eine MS Access-Datenbank mit OleDb-Verbindung, Provider = Microsoft.Jet.OLEDB.4.0

Antworten auf die Frage(13)

Ihre Antwort auf die Frage