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)

その後、(別の DB 接続を使用して) WORKORDR を作成すると、コードは新しい「次の注文番号」を取得しません。

例えば

iFoo = NewOrderNo
CreateNewWorkOrderWithNumber(iFoo)
iFoo2 = NewOrderNo

iFoo と iFoo2 の両方に同じ値を返します。

「NewOrderNo」関数の一部として、serverDBを閉じてから再度開くと、機能します。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

MSDNから

Microsoft Jet には、PageTimeout ミリ秒 (デフォルトは 5000ms = 5 秒) ごとに更新される読み取りキャッシュがあります。また、メイン処理とは別のスレッドで動作する遅延書き込みメカニズムも備えているため、ディスクへの変更を非同期的に書き込みます。これら 2 つのメカニズムはパフォーマンスの向上に役立ちますが、高い同時実行性が必要な特定の状況では、問題が発生する可能性があります。

于 2009-09-28T17:03:10.027 に答える
1

Connection Object は、使用後は必ず破棄します。接続プーリングにより、新しい接続を取得するのは安価です。

于 2009-09-28T10:40:49.163 に答える