gpt4 book ai didi

c# - MySqlDataReader 关闭连接

转载 作者:行者123 更新时间:2023-12-01 00:50:08 31 4
gpt4 key购买 nike

这是我从 MySql 中的表中选择数据的代码:

            MySqlDataReader msdr;

MySqlConnection connect = new MySqlConnection(connectionStringMySql);
MySqlCommand cmd = new MySqlCommand();

string commandLine = "SELECT id,token FROM Table WHERE id = @id AND token = @token;";

cmd.CommandText = commandLine;

cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@token", token);

cmd.Connection = connect;
cmd.Connection.Open();

msdr = cmd.ExecuteReader();

//do stuff.....

msdr.Close();
cmd.Connection.Close();

如你所见,我关闭了这两个:

        msdr.Close();
cmd.Connection.Close();

我想问一下我是否需要关闭这两个?或者只关闭 cmd.Connection.Close();

就可以了

我问它的原因是有时我在尝试选择表中的数据时会遇到此错误:详细信息:MySql.Data.MySqlClient.MySqlException:连接过多

我想知道是不是因为我没有关闭这个连接。

最佳答案

最好的编码如下

using(MySqlConnection connect = new MySqlConnection(connectionStringMySql))
using(MySqlCommand cmd = new MySqlCommand())
{
string commandLine = "SELECT id,token FROM Table WHERE id = @id AND token = @token;";
cmd.CommandText = commandLine;

cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@token", token);

cmd.Connection = connect;
cmd.Connection.Open();

using(msdr = cmd.ExecuteReader())
{

//do stuff.....
} // <- here the DataReader is closed and disposed.

} // <- here at the closing brace the connection is closed and disposed as well the command

using statement将使您的连接保持关闭和处置以及命令对象。无需在 MySqlConnection 或 MySqlDataReader 上显式调用 Close,因为 using 语句也会为您执行此操作,以防在连接打开和关闭之间的代码中触发异常

在您的原始代码中,只需使用命令、数据读取器或连接本身关闭一次连接就足够了,因为它们使用相同的对象实例,但如果您遇到异常,那么您的代码将无法关闭连接因此你冒着“打开太多连接”问题的风险

C# 8.0 更新
在这个版本的语言中,对 using 语句有一个小而有用的增强。它叫做using declaration

有了这个改变,上面的代码就可以去掉 using block 周围的大括号

using MySqlConnection connect = new MySqlConnection(connectionStringMySql);
using MySqlCommand cmd = new MySqlCommand();
string commandLine = "SELECT id,token FROM Table WHERE id = @id AND token = @token;";

.....
cmd.Connection.Open();
using msdr = cmd.ExecuteReader();
//do stuff.....

当方法退出时,所有的 using 声明将处理它们各自声明的变量

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

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