由于我的.Net Win-Form应用程序中解释的原因太长,我使用单个全局OleDbConnection来连接Access DB。当我需要时,我打开并关闭连接,但通常连接仍然打开。 问题是有时读取数据不会返回更新的数据:
Using cm As New OleDb.OleDbCommand(sQuery, cn)
Using rd As OleDb.OleDbDataReader = cm.ExecuteReader()
If rd.HasRows Then
If rd.Read() Then
Me.txtBrand.Text = rd.Item("MA_BRAND")
End If
End If
rd.Close()
End Using
End Using
如果我使用新连接,我会得到正确的数据:
Using cn As New OleDb.OleDbConnection(sConnectionString)
cn.Open()
Using cm As New OleDb.OleDbCommand(sQuery, cn)
Using rd As OleDb.OleDbDataReader = cm.ExecuteReader()
If rd.HasRows Then
If rd.Read() Then
Me.txtBrand.Text = rd.Item("MA_BRAND")
End If
End If
rd.Close()
End Using
End Using
cn.Close()
End Using
我必须使用全局连接,然后我的解决方案就是这个
cn.Close()
cn.Open()
Using cm As New OleDb.OleDbCommand(sQuery, cn)
但我问:有一个更好的解决方案来刷新OledbConnection吗?
谢谢! Pileggi
答案 0 :(得分:1)
不,不要打开连接。连接池提供快速重新连接。
您在阅读和编写数据时遇到的问题取决于Jet的实施方式:
Microsoft Jet有一个读取缓存,每隔PageTimeout毫秒更新一次(默认值为5000毫秒= 5秒)。它还有一个惰性写机制,它在与主处理的单独线程上运行,因此异步地将更改写入磁盘。
此外,rd.HasRows()
不是必需的,如果没有任何行,If rd.Read() Then
将返回false。
要继续,因为您使用rd.Close()
声明,所以不需要Using...End Using
。 End Using
将为您关闭并处理它。
答案 1 :(得分:1)