我收到错误:“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;
}
答案 0 :(得分:2)
使用不打开任何连接,它只在调用End Using后才处理任何已分配的内存。