gpt4 book ai didi

c# - 关闭连接/MySqlDataReader 不起作用

转载 作者:行者123 更新时间:2023-11-29 10:37:43 29 4
gpt4 key购买 nike

我有一个类,我的 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 行上的另一个类(class):

DataTable schema = null;

using (var schemaCommand = new MySqlCommand("SELECT * FROM " + firmCustomerTablename, connection))
{
using (var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly))
{
schema = reader.GetSchemaTable();
}
}

这也在使用中。所以我不明白为什么会出现这个错误。我想关闭连接/数据读取器不起作用。

在此更改之前,我对每个站点都有一个连接。但我的程序表现不佳。因此,我决定建立 1 个始终打开的连接,并仅调用对此打开连接的查询。现在我收到 DataReader 错误。

有人可以解释一下,为什么使用不关闭 DataReader?第 83 行不是 DataReader,而是 var,所以我不知道为什么在这一行出现此错误。

最佳答案

听起来您的问题与连接状态管理有关?我可能不完全理解您的要求,但根据设计,连接上下文中的 using 语句将关闭连接。它们是 try {} catch {} finally 的语法糖。我经常看到连接对象、命令对象等未利用 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())
{
//
}
}
}

}

文档:MSDN SqlConnection Class

关于c# - 关闭连接/MySqlDataReader 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46121412/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com