问题描述
首先,这是一个间歇性问题,对于从他们的机器访问的其他用户每天突然发生。使用 OleDbCommand 的 sql 选择返回 0 行且没有错误消息。一旦管理员用户(我自己)在不同网络中的另一台机器上运行相同的应用程序,它就会返回预期的行,之后所有用户都可以在后续运行中神奇地再次看到这些行,直到第二天。
遗留代码没有遵循管理 Ole 连接和其他相关对象的最佳实践 - 这些在类级别是静态的,在代码的各个点重用和(重新)初始化。没有 using 语句,从不关闭或处理。
一些例子:
public partial class MainForm : Form
{
public static OleDbConnection myOleDbConnection = new OleDbConnection();
OleDbCommand myOleDbCommand = new OleDbCommand();
DataSet myDataSet = new DataSet();
再往下走:
private void Form1_Load(object sender,EventArgs e)
{
myOleDbConnection.ConnectionString =
ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;
myOleDbConnection.open();
myOleDbCommand.Connection = myOleDbConnection;
myOleDbCommand.CommandText = commandText;
myOleDbCommand.CommandType = CommandType.Text;
myOleDbDataAdapter1.SelectCommand = myOleDbCommand;
try
{
myOleDbDataAdapter1.Fill(myDataSet,"MyResults");
// Log shows 0 rows,but subsequent runs show correct number
Log("Number of rows returned: " + myDataSet.Tables["MyResults"].Rows.Count);
}
catch (Exception ex)
{
// it never gets here
MessageBox.Show("An error occurred" + ex.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
这是怎么回事?这是否有可能导致池化资源出现问题并阻止连接正确处理事情?
Log() 函数使用最佳实践(单独的连接并始终包含在 using 语句中)并且在任何时候写入数据库都没有问题。
连接字符串没有特殊设置:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\Server\MyMdb.mdb"
我查找了相关问题,但没有发现问题间歇性发生的任何情况:
Problem with OleDbConnection,Excel and connection pooling
OleDataAdapter Fill Method Returning Empty Rows To Data Table
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)