c#中关闭读取器时,从ms访问中读取的尝试无效
本文关键字:读取 访问 无效 ms | 更新日期: 2023-09-27 18:17:31
这段代码出错了,我使用winform来执行这段代码
下面是cs代码:
try
{
conn5.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = conn5;
string query = "select * from OrderDataListTable";
command.CommandText = query;
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
datetime = reader["DateTime"].ToString();
datetime = datetime.Substring(3, 2);
if (dateString == datetime)
{
String orderNum;
orderNum = reader["OrderNo"].ToString();
textBox3.Text = orderNum.ToString();
conn5.Close();
getOrder();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex);
}
错误提示如下:
while (reader.Read())
我强烈怀疑您的dateString == datetime
返回true
时,您读取您的阅读器和您关闭连接,而您读取它。如果调试代码,就可以看到它。你当然不应该那样做。
Reader 只有在连接打开时才能工作。
我建议使用using
语句来自动处置您的命令、连接和阅读器,而不是手动调用Close
或Dispose
方法。
using(var conn5 = new OleDbConnection(connString))
using(var command = conn5.CreateCommand())
{
// Define your CommandText
using(var reader = command.ExecuteReader())
{
while (reader.Read())
{
// Do other stuff
}
}
}
通过这个命令
while (reader.Read()) { .. }
程序循环读取器获取的行。通过命令
将阅读器与连接相关联。conn.Close();
while语句中的只读取第一行,关闭连接导致无法读取其他行。
当你使用try catch时,最好关闭finally块上的reader和连接。 这样的 // Declare reader before the try block
OleDbDataReader reader = null;
try
{
conn5.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = conn5;
string query = "select * from OrderDataListTable";
command.CommandText = query;
reader = command.ExecuteReader();
while (reader.Read())
{
datetime = reader["DateTime"].ToString();
datetime = datetime.Substring(3, 2);
if (dateString == datetime)
{
String orderNum;
orderNum = reader["OrderNo"].ToString();
textBox3.Text = orderNum.ToString();
// conn5.Close(); -> remove this line
getOrder();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex);
}
finally
{
reader.Close();
conn5.Close();
}