MySqlDataReader关闭连接

MTA*_*MTA 0 .net c# mysql iis

这是我在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();
Run Code Online (Sandbox Code Playgroud)

正如你所看到我关闭这两个:

        msdr.Close();
        cmd.Connection.Close();
Run Code Online (Sandbox Code Playgroud)

我想问我是否需要关闭这两个?或者只关闭它就可以了cmd.Connection.Close();

我问它的原因是因为有时候当我尝试在表格中选择数据时我会收到此错误: Details: MySql.Data.MySqlClient.MySqlException: Too many connections

我想知道是不是因为我没有关闭这种联系.

Ste*_*eve 5

对此的最佳编码如下

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
Run Code Online (Sandbox Code Playgroud)

using语句将让您连接关闭和设置以及命令对象.没有必要在MySqlConnection或MySqlDataReader上显式调用Close,因为using语句将为您执行此操作,以防在代码在打开和关闭之间触发异常

在原始代码中,仅使用命令,datareader或连接本身关闭连接就足够了,因为它们使用相同的对象实例,但如果您有异常,那么您的代码无法关闭连接,因此您冒"太多连接打开"的问题