データベースに複数の行を次々に挿入しようとしています。関連するコードは次のとおりです。
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()
今、私が一度それを呼ぶならば、それはうまくいきます。異なるボタン(ボタンごとに異なる値を挿入する)から2回呼び出すと、うまく機能します。ただし、同じボタンでコードを2回、次々に呼び出すと、2つの行が挿入されますが、2番目の行は最初の行と同じです。コマンドテキストを確認しましたが、クエリを実行すると正しいのですが、行が重複しています。
2番目のインサートを呼び出す前にスレッドを500ミリ秒間スリープすると、正常に動作します。しかし、私がそれを100msだけ眠ると、それは複製されます。何か案は?
編集:不明な点がある場合は申し訳ありません。問題は、特にタイムスタンプ列ではありません。実際、Timestamp列に重複があっても問題ありません。これが私がそれを呼んでいる方法です。
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)
ご覧のとおり、最初のものは「HelloWorld!」とだけ書いています。2番目は「テスト」と書きます。プログラムを実行すると、「HelloWorld!」の2つの行が表示されます。これがより明確になることを願っています。