我收到错误消息:“ExecuteReader 需要一个打开的连接”,我知道解决方法是添加一个 connection.Open()/connection.Close()。我与此错误有关的问题更多的是让我了解究竟发生了什么。
我目前正在使用“USING”语句,我希望它可以为我打开和关闭/处理连接。所以我想我不明白为什么它没有按预期工作,我需要自己明确编码 connection.Open() / connection.Close() 来解决这个问题。我做了一些研究,发现人们遇到了类似的问题,因为他们使用的是静态连接。在我的情况下,我正在创建一个新的连接实例......因此,它困扰着我,并希望能够深入了解它,而不是仅仅修复它并继续前进。先感谢您。
这是代码:
try
{
using (SqlConnection connection = new SqlConnection(myConnStr))
using (SqlCommand command = new SqlCommand("mySPname", connection))
{
command.CommandType = CommandType.StoredProcedure;
//add some parameters
SqlParameter retParam = command.Parameters.Add("@RetVal", SqlDbType.VarChar);
retParam.Direction = ParameterDirection.ReturnValue;
/////////////////////////////////////////////////
// fix - add this line of code: connection.Open();
/////////////////////////////////////////////////
using(SqlDataReader dr = command.ExecuteReader())
{
int success = (int)retParam.Value;
// manually close the connection here if manually open it. Code: connection.Close();
return Convert.ToBoolean(success);
}
}
}
catch (Exception ex)
{
throw;
}