C# 如何正确关闭读卡器?
所以,我想检查数据库中是否存在该表,如果它存在,则必须抛出一个MessageBox。我的问题是,当我执行读卡器时,我无法关闭它,它会出现以下错误: 已存在与此连接关联的打开的DataReader 必须先关闭它C# 如何正确关闭读卡器?,c#,sql,C#,Sql,所以,我想检查数据库中是否存在该表,如果它存在,则必须抛出一个MessageBox。我的问题是,当我执行读卡器时,我无法关闭它,它会出现以下错误: 已存在与此连接关联的打开的DataReader 必须先关闭它 string query2=$“显示表在appdb中的位置,如“{tablename}%”; var conn=新的MySqlConnection(dbConnectionString); conn.Open(); var cmd2=新的MySqlCommand(query2,conn);
string query2=$“显示表在appdb中的位置,如“{tablename}%”;
var conn=新的MySqlConnection(dbConnectionString);
conn.Open();
var cmd2=新的MySqlCommand(query2,conn);
var reader=cmd2.ExecuteReader();
if(reader.Read())
{
ia.flag=“停止”;
cmd2.Cancel();
reader.Close();
}
其他的
{
cmd.ExecuteNonQuery();
ia.flag=“继续”;
cmd2.Cancel();
reader.Close();
}
康涅狄格州关闭();
返回true;
我正在使用reader.Close()
,但似乎我必须做些别的事情。有什么想法吗
p、 s.:“ia.flag”只是一个字符串,如果表存在或不存在,我想传递给其他类
编辑
这项工作:
string query2=$“显示表在appdb中的位置,如“{tablename}%”;
使用(var conn=newmysqlconnection(dbConnectionString))
{
conn.Open();
var cmd=新的MySqlCommand(query,conn);
//正在使用(var cmd1)
使用(var cmd2=new MySqlCommand(query2,conn))
{
使用(var reader=cmd2.ExecuteReader())
{
if(reader.Read())
{
reader.Close();
MessageBox.Show(“Ime ankete vec postoji,odaberite drugo!”);
flag=false;
康涅狄格州关闭();
返回false;
}
其他的
{
reader.Close();
flag=true;
cmd.ExecuteNonQuery();
康涅狄格州关闭();
返回true;
}
}
}
}
您应该在使用完任何实现了IDisposable
的对象后立即处置它(这也包括命令和连接):
注意,我们使用了
reader.Close()
以确保在执行cmd
之前没有打开的DataReader
。用于连接的短模板:
using(MySqlConnection connect = new MySqlConnection(dbConnectionString))
using(MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = query2;
cmd.Connection = connect;
cmd.Connection.Open();
using(MySqlDataReader msdr = cmd.ExecuteReader())
{
// do stuff
}
}
可能的副本请提供一份。例如,我们必须了解
cmd
是如何声明和实例化的,或者至少显示堆栈trace@mjwills:读取器
与执行cmd
有什么关系?您可能应该让它们这样做。显然,我自己没有测试过,我自己也不想执行两个不同的命令。您的观点可能是正确的。@mjwills:我通过添加对reader.Close()的调用对我的答案进行了轻微的编辑在执行cmd
之前执行code>。
using(MySqlConnection connect = new MySqlConnection(dbConnectionString))
using(MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = query2;
cmd.Connection = connect;
cmd.Connection.Open();
using(MySqlDataReader msdr = cmd.ExecuteReader())
{
// do stuff
}
}