J'essaie d'insérer plusieurs lignes, l'une après l'autre, dans une base de données. Voici le code pertinent.Problème lors de l'insertion rapide de plusieurs lignes dans la base de données Oracle à partir de VB
Private ConnectionString As String = "Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(CID=GTU_APP)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=xxx)))(CONNECT_DATA=(SID=xxx)(SERVER=DEDICATED)));User Id=xxx;Password=xxx;"
Private SQL As String = "INSERT INTO XXX.BU_LOG (PROGRAM, LOCATION, MESSAGE, TIMESTAMP, ""LEVEL"", COMPUTER, ""USER"") "
Dim Connection As New OleDbConnection(ConnectionString)
Dim Command As OleDbCommand
'The SQL variable is the first part of an insert statement
SQLValues = "VALUES ('" & Program & "','" & Location & "','" & Message & "','" & Timestamp & "','" & LevelName & "','" & Computer & "','" & User & "')"
Dim Command As New OleDbCommand(SQL & SQLValues, Connection)
Connection.Open()
Command.ExecuteNonQuery()
Connection.Close()
Maintenant, si je l'appelle une fois que cela fonctionne très bien. Si je l'appelle deux fois de dire différents boutons (en insérant des valeurs différentes pour chaque bouton) cela fonctionne très bien. Toutefois, lorsque j'appelle le code deux fois dans le même bouton, l'un après l'autre, il insère deux lignes, mais la deuxième ligne est la même que la première ligne. J'ai vérifié le texte de la commande et il est correct quand il exécute la requête mais il duplique la ligne.
Si je dors le fil pendant 500ms avant que j'appelle le deuxième insert, cela fonctionne bien. Mais si je ne fais que dormir 100ms il va dupliquer. Des idées?
EDIT: Désolé si je n'étais pas clair. Le problème n'est pas spécifiquement la colonne Timestamp. En fait, il est normal que la colonne Timestamp ait des dupes. Voici comment je l'appelle. Comme vous pouvez le voir, le premier vient d'écrire "Bonjour tout le monde!"
log.Write(My.Application.Info.AssemblyName, System.Reflection.MethodBase.GetCurrentMethod.Name, "Hello World!")
log.Write(My.Application.Info.AssemblyName, System.Reflection.MethodBase.GetCurrentMethod.Name, "Testing", , VB2008_Log_Dll.Log.mLevel.Fatal)
et le second écrit "Testing". Quand je lance le programme, je reçois deux lignes avec "Hello World!". J'espère que cela le rendra plus clair.