已经有一个与此命令关联的打开的 DataReader,必须先将其关闭
There is already an open DataReader associated with this Command which must be closed first
我有一个问题。你能告诉我这段代码有什么问题吗?所以案例看起来像这样:程序向我显示了这个错误,但不是每个 time.Sometimes 它确实显示了它,但有时却没有。
错误:
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dll
Additional information: There is already an open DataReader associated with this Command which must be closed first.
代码:
private void loadlist()
{
ItemList.Items.Clear();
NumberList.Items.Clear();
newConnection.connection();
cmd.CommandText = "select * from Items";
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
ItemList.Items.Add(dr[0].ToString());
NumberList.Items.Add(dr[1].ToString());
}
}
dr.Close();
newConnection.cnOff();
}
我可以删除“dr.Close()”并且它起作用了,在我尝试运行之后我必须编辑一些代码(写回“dr.Close()”)并且它回来了。顺便提一句。对不起我的英语:<
为您的方法使用本地 SqlDataReader
实例。此外,如果您使用 using 块,它将负责调用 Dispose
方法并清理内存。
using(SqlDataReader dr= cmd.ExecuteReader())
{
while (dr.Read())
{
//read from reader now
ItemList.Items.Add(dr[0].ToString());
}
}
您也可以在连接和命令对象上使用 using 块。
var connStr = "ReplaceYourConnectionStringHere"
using (var c = new SqlConnection(connStr))
{
using (var cmd = new SqlCommand("SELECT * FROM ITEMS",c))
{
c.Open();
using (var dr = cmd.ExecuteReader())
{
while (dr.Read())
{
//read from reader now
//ItemList.Items.Add(dr[0].ToString());
}
}
}
//No need to explicitly close connection :) Thanks to "using"
}
using 语句确保即使在调用对象上的方法时发生异常也会调用 Dispose
我有一个问题。你能告诉我这段代码有什么问题吗?所以案例看起来像这样:程序向我显示了这个错误,但不是每个 time.Sometimes 它确实显示了它,但有时却没有。
错误:
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dll
Additional information: There is already an open DataReader associated with this Command which must be closed first.
代码:
private void loadlist()
{
ItemList.Items.Clear();
NumberList.Items.Clear();
newConnection.connection();
cmd.CommandText = "select * from Items";
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
ItemList.Items.Add(dr[0].ToString());
NumberList.Items.Add(dr[1].ToString());
}
}
dr.Close();
newConnection.cnOff();
}
我可以删除“dr.Close()”并且它起作用了,在我尝试运行之后我必须编辑一些代码(写回“dr.Close()”)并且它回来了。顺便提一句。对不起我的英语:<
为您的方法使用本地 SqlDataReader
实例。此外,如果您使用 using 块,它将负责调用 Dispose
方法并清理内存。
using(SqlDataReader dr= cmd.ExecuteReader())
{
while (dr.Read())
{
//read from reader now
ItemList.Items.Add(dr[0].ToString());
}
}
您也可以在连接和命令对象上使用 using 块。
var connStr = "ReplaceYourConnectionStringHere"
using (var c = new SqlConnection(connStr))
{
using (var cmd = new SqlCommand("SELECT * FROM ITEMS",c))
{
c.Open();
using (var dr = cmd.ExecuteReader())
{
while (dr.Read())
{
//read from reader now
//ItemList.Items.Add(dr[0].ToString());
}
}
}
//No need to explicitly close connection :) Thanks to "using"
}
using 语句确保即使在调用对象上的方法时发生异常也会调用 Dispose