这是我在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();
我问它的原因是因为有时候当我尝试在表格中选择数据时会出现此错误:
Details: MySql.Data.MySqlClient.MySqlException: Too many connections
我想知道是不是因为我没有关闭这种联系。
答案 0 :(得分: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
using statement将保持您的连接关闭和处置以及命令对象。无需在MySqlConnection或MySqlDataReader上显式调用Close,因为using语句将为您执行此操作,以防在代码在打开和关闭连接之间触发异常
在原始代码中,只需使用命令,datareader或连接本身关闭连接就足够了,因为它们使用相同的对象实例,但如果您有异常则代码无法关闭连接因此你冒着“打开太多连接”问题的风险
答案 1 :(得分:0)
如果您在方法中使用此代码,最好关闭数据读取器以及数据连接