2009-09-28 1 views
1

Я использую следующий код для разработки следующего уникального номера заказа в базе данных доступа. Является серверной базы данных «System.Data.OleDb.OleDbConnection»SELECT через oledbcommand в vb.net не подбирает последние изменения

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

Если я впоследствии создать WORKORDR (используя другое соединение DB), код не будет забрать новый «следующий порядковый номер.»

например.

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 
+0

что именно эту функцию: CreateNewWorkOrderWithNumber (IFoo) делать? – manji

+0

Я включил код для CreateNewWorkOrderWithNumber. – seanyboy

ответ

1

От MSDN

Microsoft Jet имеет чтения-кэш, который обновляется каждый PageTimeout миллисекунды (по умолчанию 5000 мс = 5 секунд). Он также имеет механизм ленивой записи, который работает с отдельной нитью до основной и поэтому записывает изменения в диск асинхронно. Эти два механизма помогают повысить производительность, но в определенных ситуациях, требующих высокой параллелизма , могут создавать проблемы .

  • Если возможно, просто используйте одно соединение.
  • В VB6 вы можете force the connection обновить себя с помощью ADO. Я не знаю, возможно ли это с помощью VB.NET. Сегодня мой Google-фу кажется слабым.
  • Вы можете change the PageTimeout value in the registry но это будет влиять на все программы на компьютере, которые используют двигатель Jet (т.е. программного использования баз данных Access)
1

Я всегда выбрасывайте объект Connection после того, как я использовал его. Из-за подключения пула получение нового соединения дешево.

Смежные вопросы