从VB快速向Oracle数据库插入多行时出现问题

时间:2008-11-19 19:46:11

标签: vb.net oracle loops

我正在尝试将多个行一个接一个地插入数据库。这是相关的代码。

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列可以使用dupes。这是我如何称呼它。

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 个答案:

答案 0 :(得分:2)

TIMESTAMP列的数据类型是什么?如果是DATE,则Oracle DATE值仅精确到1秒,因此在半秒左右的时间内两次插入可能会以相同的值结束。

有一种名为TIMESTAMP的新数据类型,如果合适,可以精确到几分之一秒。