2008-11-19 59 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的新数据类型,它精确到几分之一秒,可以在适当的情况下使用。