我收到此错误“已经有一个与此Connection关联的打开的DataReader必须先关闭”。我尝试过使用命令但仍无法解决此问题。我使用的代码如下
{
conn.Open();
queryStr = "";
queryStr = "select * from mydata.items;";
cmd = new MySqlCommand(queryStr, conn);
cmd.ExecuteReader();
using (MySqlDataAdapter MyAdapter = new MySqlDataAdapter())
{
MyAdapter.SelectCommand = cmd;
using (DataTable dTable = new DataTable())
{
MyAdapter.Fill(dTable);
GridView1.DataSource = dTable;
}
}
}
我最初尝试使用下面的代码(不使用命令)。
conn.Open();
queryStr = "";
queryStr = "select * from mydata.items;";
cmd = new MySqlCommand(queryStr, conn);
cmd.ExecuteReader();
MySqlDataAdapter MyAdapter = new MySqlDataAdapter();
MyAdapter.SelectCommand = cmd;
DataTable dTable = new DataTable();
MyAdapter.Fill(dTable);
GridView1.DataSource = dTable;
conn.Close();
但是这两个代码都给出了完全相同的错误(即已经有一个与此Connection关联的开放DataReader,必须先关闭它。) 非常感谢您的帮助。 提前谢谢!
答案 0 :(得分:1)
此行创建一个您未关闭的DataReader:
cmd.ExecuteReader();
只需删除整行,在你的情况下就没用了。
答案 1 :(得分:1)
数据集的使用将比桌子更方便和有效。即使你可以缓存它 也不需要使用using构造因为MySqlAdapter的fill方法为你做了一切就像
i)打开连接。 ii)阅读命令ii)执行命令ii)关闭连接
using ()
{
if(Cache["mydata"]==null)
{
queryStr = "";
queryStr = "select * from mydata.items;";
cmd = new MySqlCommand(queryStr, conn);
MySqlDataAdapter MyAdapter = new MySqlDataAdapter();
MyAdapter.SelectCommand = cmd;
DataSet ds =new DataSet();
MyAdapter.Fill(ds);
Cache["mydata"]=ds;
GridView1.DataSource = ds;
GridView1.DataBind();
}
else
{
GridView1.DataSource = (DataSet)Cache["mydata"];
GridView1.DataBind();
}
}