Avatar billede Slettet bruger
09. oktober 2008 - 17:39 Der er 3 kommentarer og
1 løsning

Problem med LAST_INSERT_ID()

Hej

Det her spørgsmål kunne godt ligge i MySQL, men tror mere problemet ligger i min asp.net side.

Til problemet:

Jeg indsætter en række i en table:
strSQL = "INSERT INTO inv_order(orderID,skoleID) VALUES(null," + customerID + ")";

dbAccess.dbExecuteNonQuery(strSQL);

Derefter vil jeg gerne vide orderID:
strSQL = "SELECT LAST_INSERT_ID() as lastID";
dbAccess.DbOpen();

dataReader = dbAccess.dbExecuteQuery(strSQL);

while (dataReader.Read())
    orderID = int.Parse(dataReader["lastID"].ToString());
dbAccess.DbClose();


Problemet er så den giver mig et ID der er blevet indsæt længere tilbage og ikke det id jeg lige har sat ind. Nogen gange går det godt og andre går det galt. Hvad kan der være i vejen?

DB metoder:
        public MySqlDataReader dbExecuteQuery(string strSql)
        {
            MySqlCommand sqlCmd = new MySqlCommand(strSql, sqlConnection);

            mySqlReader = sqlCmd.ExecuteReader();
            return mySqlReader;
        }

        public void dbExecuteNonQuery(string strSql)
        {
            MySqlCommand sqlCmd = new MySqlCommand(strSql, sqlConnection);

            sqlConnection.Open();

            sqlCmd.ExecuteNonQuery();

            sqlConnection.Close();
        }

        public void DbOpen()
        {
            sqlConnection.Open();
        }

        public void DbClose()
        {
            sqlConnection.Close();
            mySqlReader.Close();
           
        }
På forhånd tak.
Avatar billede arne_v Ekspert
09. oktober 2008 - 18:26 #1
LAST_INSERT_ID() virker per connection d.v.s. at du maa ikke close connection og aabne
mellem din INSERT og din SELECT.
Avatar billede arne_v Ekspert
09. oktober 2008 - 18:26 #2
dataReader = dbAccess.dbExecuteQuery(strSQL);
while (dataReader.Read())
    orderID = int.Parse(dataReader["lastID"].ToString());

kunne nok laves smartere med ExecuteScalar.
Avatar billede Slettet bruger
10. oktober 2008 - 10:45 #3
Mange tak det virkede at lade forbindelsen stå open. Fik også sat ExecuteScalar ind istedet.

Smid et tak.
Avatar billede arne_v Ekspert
10. oktober 2008 - 11:25 #4
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester