C# 如何正确关闭读卡器?

C# 如何正确关闭读卡器?,c#,sql,C#,Sql,所以,我想检查数据库中是否存在该表,如果它存在,则必须抛出一个MessageBox。我的问题是,当我执行读卡器时,我无法关闭它,它会出现以下错误: 已存在与此连接关联的打开的DataReader 必须先关闭它 string query2=$“显示表在appdb中的位置,如“{tablename}%”; var conn=新的MySqlConnection(dbConnectionString); conn.Open(); var cmd2=新的MySqlCommand(query2,conn);

所以,我想检查数据库中是否存在该表,如果它存在,则必须抛出一个MessageBox。我的问题是,当我执行读卡器时,我无法关闭它,它会出现以下错误:

已存在与此连接关联的打开的DataReader 必须先关闭它

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
    }
}