Я пытаюсь вставить несколько строк, одну за другой, в базу данных. Вот соответствующий код.
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()
Теперь, если я позвоню один раз, это прекрасно работает. Если я вызываю его дважды, скажем, с разных кнопок (вставляя разные значения для каждой кнопки), это прекрасно работает. Однако, когда я вызываю код дважды в одной и той же кнопке, одна за другой, он вставляет две строки, но вторая строка совпадает с первой строкой. Я проверил текст команды, и это правильно, когда он выполняет запрос, но дублирует строку.
Если я сплю нить в течение 500 мс перед вызовом второй вставки, она работает нормально. Но если я сплю только 100 мс, он дублируется. Есть идеи?
РЕДАКТИРОВАТЬ: Извините, если мне было неясно. Проблема не только в столбце Timestamp. Фактически, для столбца 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)
Как видите, первый просто пишет "Hello World!" а второй пишет "Тестирование". Когда я запускаю программу, я получаю две строки с «Hello World!». Надеюсь, это прояснит ситуацию.