2008-11-19 95 views
1

我試圖向數據庫中一個接一個地插入多行。這是相關的代碼。從VB快速插入多行到Oracle數據庫的問題

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毫秒,它可以正常工作。但如果我只睡100ms就會重複。有任何想法嗎?編輯:對不起,如果我不清楚。對不起,問題不在於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!」。我希望這更清楚。

回答

2

列TIMESTAMP的數據類型是什麼?如果是DATE,則Oracle DATE值只能精確到1秒,因此在半秒鐘左右的時間內插入兩次可能會得到相同的列值。

有一個稱爲TIMESTAMP的新數據類型,它精確到幾分之一秒,可以在適當的情況下使用。