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

Brauche ich eine Funktion, die führt eine INSERT-Anweisung auf eine Datenbank und gibt den Auto_Increment primary key. Ich habe folgenden C# code, aber, während die INSERT-Anweisung funktioniert gut (ich kann sehen, dass der Datensatz in der Datenbank der PK richtig erzeugt wird und rows == 1), wird der id-Wert ist immer 0. Irgendwelche Ideen auf, was könnte schief gehen?

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

In der Antwort zu Antworten, ich habe 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 bin jetzt immer die Fehlermeldung "Zeichen nach Ende von SQL-Anweisung"

Verwende ich eine MS Access-Datenbank mit OLE DB Verbindung, Provider=Microsoft.Jet.OLEDB.4.0

InformationsquelleAutor der Frage Gillian | 2008-10-09

Schreibe einen Kommentar