【发布时间】:2019-08-27 12:24:12
【问题描述】:
所以,我想检查该表是否存在于数据库中,如果存在则必须抛出一个 MessageBox。我的问题是,当我执行 Reader 时,我无法关闭它,并且出现以下错误:
已经有一个打开的 DataReader 与此 Connection 关联 必须先关闭。
string query2 = $"SHOW TABLES WHERE Tables_in_appdb LIKE '%{tableNamee}%'";
var conn = new MySqlConnection(dbConnectionString);
conn.Open();
var cmd2 = new MySqlCommand(query2, conn);
var reader = cmd2.ExecuteReader();
if (reader.Read())
{
ia.flag = "stop";
cmd2.Cancel();
reader.Close();
}
else
{
cmd.ExecuteNonQuery();
ia.flag = "continue";
cmd2.Cancel();
reader.Close();
}
conn.Close();
return true;
我正在使用reader.Close(),但似乎我必须做其他事情。有什么想法吗?
ps:“ia.flag”只是一个字符串,如果表存在与否,我想传递给其他类。
编辑 这有效:
string query2 = $"SHOW TABLES WHERE Tables_in_appdb LIKE '%{tableNamee}%'";
using (var conn = new MySqlConnection(dbConnectionString))
{
conn.Open();
var cmd = new MySqlCommand(query, conn);
//using(var cmd1 ) ..)
using (var cmd2 = new MySqlCommand(query2, conn))
{
using (var reader = cmd2.ExecuteReader())
{
if (reader.Read())
{
reader.Close();
MessageBox.Show("Ime ankete vec postoji, odaberite drugo!");
flag = false;
conn.Close();
return false;
}
else
{
reader.Close();
flag = true;
cmd.ExecuteNonQuery();
conn.Close();
return true;
}
}
}
}
【问题讨论】:
-
请提供minimal reproducible example。例如,我们必须看到
cmd是如何声明和实例化的。 -
或者至少显示堆栈跟踪