我有一个类,我的MysqlConnection在里面:
public class DB
{
private static MySqlConnection _Connection;
public static MySqlConnection Connection
{
get
{
if(_Connection == null)
{
string cs = string.Format("SERVER={0}; DATABASE={1}; UID={2}; PWD={3};", SERVER_ADRESS, DATABASE, UID, PWD);
_Connection = new MySqlConnection(cs);
}
if(_Connection.State == System.Data.ConnectionState.Closed)
try
{
MessageBox.Show("MySQL Connection ist geschlossen. Öffne Sie");
_Connection.Open();
}
catch(MySqlException ex)
{
switch (ex.Number)
{
case 0:
MessageBox.Show("Verbindung zum Server konnte nicht hergestellt werden.");
break;
case 1045:
MessageBox.Show("Ungültiger Benutzername/Passwort.");
break;
default:
MessageBox.Show(ex.Message);
break;
}
}
return _Connection;
}
}
}因此,我可以在DB.Connection的所有其他类中使用此连接。
但现在我得到的是"DataReader已经打开了“。但是我所有的DataReader都在使用中。
我们从我的登录页面开始:
using (loginreader = cmd.ExecuteReader())
{
if (loginreader.Read())
{
DB.Connection.Close();
return true;
}
else
{
DB.Connection.Close();
return false;
}
loginreader.Close();
} 我猜这不管用。但是登录后的第一条错误消息是我在另一个类的第83行上得到的:
DataTable schema = null;
using (var schemaCommand = new MySqlCommand("SELECT * FROM " + firmCustomerTablename, connection))
{
using (var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly))
{
schema = reader.GetSchemaTable();
}
}这也是在使用中。所以我不明白为什么我会得到这个错误。我猜关闭连接/ DataReaders不起作用。
在此更改之前,我对每个站点都有连接。但是我的程序没有好的性能。因此,我决定建立一个总是打开的连接,并只调用对这个打开的连接的查询。现在我得到了DataReader错误。
谁能给我解释一下,为什么使用不能关闭DataReader?第83行不是一个变量,它是一个变量,所以我不知道为什么我在这一行得到了这个错误。,DataReader。
发布于 2017-09-09 01:51:54
听起来你的问题是关于连接状态管理的?我可能没有完全理解您的要求,但是根据设计,连接上下文中的using语句将关闭连接。它们是try {} catch {} finally的语法糖。我经常看到Connection对象、Command对象等不使用IDisposable,没有被正确地释放/关闭的例子。
在这段代码中,我没有看到要执行命令的连接再次打开。
DataTable schema = null;
using (var schemaCommand = new MySqlCommand("SELECT * FROM " + firmCustomerTablename, connection))
{
using (var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly))
{
schema = reader.GetSchemaTable();
}
}这是一个基本的想法:
using (var conn = new SqlConnection(connectionString: ""))
{
conn.Open();
using (var cmd = new SqlCommand(cmdText: "cmdText", connection: conn))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
//
}
}
}
}https://stackoverflow.com/questions/46121412
复制相似问题