1

我正在使用以下代码来计算访问数据库中的下一个唯一订单号。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(使用不同的数据库连接),代码将不会获取新的“下一个订单号”。

例如

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
4

2 回答 2

1

我总是在使用连接对象后扔掉它。由于连接池获得一个新的连接是便宜的。

于 2009-09-28T10:40:49.163 回答
1

来自MSDN

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

  • 如果可能的话,只使用一个连接。
  • 回到 VB6,您可以使用 ADO强制连接自行刷新。我不知道 VB.NET 是否可行。我的 Google-fu 今天似乎很弱。
  • 您可以更改注册表中的 PageTimeout 值,但这会影响计算机上使用 Jet 引擎的所有程序(即以编程方式使用 Access 数据库)
于 2009-09-28T17:03:10.027 回答