通过vb.net中的oledbcommand选择没有获取最近的更改

时间:2009-09-28 10:36:41

标签: vb.net oledb oledbconnection

我正在使用以下代码计算出访问数据库中的下一个唯一订单号。 ServerDB是“System.Data.OleDb.OleDbConnection”

Dim command As New OleDb.OleDbCommand("", serverDB)
command.CommandText = "SELECT max (ORDERNO) FROM WORKORDR"
iOrder = command.ExecuteScalar()
NewOrderNo = (iOrder + 1)

如果我随后创建了一个WORKORDR(使用不同的数据库连接),代码将不会获取新的“下一个订单号”。

e.g。

iFoo = NewOrderNo
CreateNewWorkOrderWithNumber(iFoo)
iFoo2 = NewOrderNo

将向iFoo和iFoo2返回相同的值。

如果我关闭然后重新打开serverDB,作为“NewOrderNo”功能的一部分,那么它可以工作。 iFoo和iFoo2都是正确的。

有没有办法强制“System.Data.OleDb.OleDbConnection”在这种情况下刷新数据库而不关闭并重新打开连接。 例如有没有相当于serverdb.refresh或serverdb.FlushCache

的东西

我如何创建订单。 我想知道这是否可能是因为在创建订单后没有更新我的交易。我正在使用XSD创建订单,我用来创建记录的代码是......

Sub CreateNewWorkOrderWithNumber(ByVal iNewOrder As Integer)
    Dim OrderDS As New CNC
    Dim OrderAdapter As New CNCTableAdapters.WORKORDRTableAdapter

    Dim NewWorkOrder As CNC.WORKORDRRow = OrderDS.WORKORDR.NewWORKORDRRow

    NewWorkOrder.ORDERNO = iNewOrder
    NewWorkOrder.name = "lots of fields filled in here."

    OrderDS.WORKORDR.AddWORKORDRRow(NewWorkOrder)
    OrderAdapter.Update(NewWorkOrder)

    OrderDS.AcceptChanges()
End Sub

2 个答案:

答案 0 :(得分:1)

我使用后总是抛弃一个连接对象。由于连接池获得新连接很便宜。

答案 1 :(得分:1)

来自MSDN

  

Microsoft Jet有一个读取缓存   每个PageTimeout毫秒更新   (默认为5000毫秒= 5秒)。它   还有一个懒惰的写机制   在与main的单独线程上运行   处理并因此将更改写入   磁盘异步。这两个   机制有助于提升绩效,但是   在某些需要的情况下   高并发性,他们可能会创建   问题。

  • 如果可能,只需使用一个连接即可。
  • 回到VB6,您可以force the connection使用ADO刷新自己。我不知道VB.NET是否可行。我的谷歌今天似乎很弱。
  • 您可以change the PageTimeout value in the registry,但这会影响计算机上使用Jet引擎的所有程序(即程序化使用Access数据库)