ВЫБЕРИТЕ через oledbcommand в vb.net не собирая последние изменения
Я использую следующий код для разработки следующего уникального номера заказа в базе данных доступа. 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
2 ответа
Из MSDN
Microsoft Jet имеет кэш-память чтения, которая обновляется каждые миллисекунды PageTimeout (по умолчанию 5000 мс = 5 секунд). Он также имеет механизм отложенной записи, который работает в отдельном потоке для основной обработки и, таким образом, записывает изменения на диск асинхронно. Эти два механизма помогают повысить производительность, но в определенных ситуациях, требующих высокого параллелизма, они могут создавать проблемы.
- Если возможно, просто используйте одно соединение.
- Вернувшись в VB6, вы можете принудительно обновить соединение, используя ADO. Я не знаю, возможно ли это с VB.NET. Мой Google-фу кажется слабым сегодня.
- Вы можете изменить значение PageTimeout в реестре, но это повлияет на все программы на компьютере, которые используют движок Jet (т. Е. Программное использование баз данных Access).
Я всегда выбрасываю объект подключения после того, как использую его. Из-за пула подключений получение нового соединения обходится дешево.