ExecuteReader需要打开连接

时间:2015-05-01 15:51:22

标签: sqlconnection executereader

我收到错误:“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;            
        }

1 个答案:

答案 0 :(得分:2)

使用不打开任何连接,它只在调用End Using后才处理任何已分配的内存。