Проблема быстрой вставки нескольких строк в базу данных Oracle из VB - PullRequest
1 голос
/ 19 ноября 2008

Я пытаюсь вставить несколько строк, одну за другой, в базу данных. Вот соответствующий код.

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!». Надеюсь, это прояснит ситуацию.

1 Ответ

2 голосов
/ 20 ноября 2008

Какой тип данных столбца TIMESTAMP? Если это DATE, значения Oracle DATE имеют точность только до 1 секунды, поэтому две вставки в течение полсекунды или около того могут закончиться тем же значением для столбца.

Существует более новый тип данных, названный TIMESTAMP, с точностью до доли секунды, который вы могли бы использовать вместо этого, если это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...