如何解决OleDbCommand 偶尔不返回任何预期的行,没有错误消息
首先,这是一个间歇性问题,对于从他们的机器访问的其他用户每天突然发生。使用 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 举报,一经查实,本站将立刻删除。