SqlDataReader InvalidOperationException [英] SqlDataReader InvalidOperationException

查看:171
本文介绍了SqlDataReader InvalidOperationException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个SqlDB.dll具有以下功能:

  public SqlDataReader getEnumValues(int enumId)
{
SqlDataReader reader = null;
using(SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command =
new SqlCommand(
SELECT * FROM [EnumValue] WHERE enumId LIKE'+ enumId +';,
connection);
reader = command.ExecuteReader();
// if(reader.Read())
// Debug.WriteLine(inside sqlDb-> getEnumValues command =+ command.CommandText +reader [name] =+ reader [名称] ToString()+reader [value] =+ reader [value] ToString()+reader [description] =+ reader [description] ToString()
}
//reader.Close();
返回阅读器
}

正如你所看到的,我已经尝试在返回之前关闭读者,我读到里面的数据,没关系。
我使用这样的功能:

  using(SqlDataReader getEnumValuesReader =(SqlDataReader)getEnumValues.Invoke(sqlDB ,getEnumValuesForEnumParam))
{
Debug.WriteLine(success getEnumValues - );

if(getEnumValuesReader.HasRows)
{
while(getEnumValuesReader.Read())//循环抛出所有枚举值并将其添加到当前枚举
{
try
{
values.Add(new Model.EnumValue getEnumValuesReader [name的ToString()));
Debug.WriteLine(Value [0] .name =+ values [0] .Name);
}
catch(Exception ex)
{
Debug.WriteLine(构建新的EnumValue中的错误+ ex.Message);
}
}
}

}

,我正在收到类型System.InvalidOperationException的异常。



我猜这是与传递的Sqldatareader有关的。

解决方案

SQL读取器不能存在于SQL连接的上下文之外。您的连接正在处理您的方法中,因此您的返回的读取器无法在调用方法中获取任何数据。



最佳选项是从读取器返回值,而不是读者。传递读者不是好的做法,这意味着底层连接等是开放的,没有开放的。


I have a SqlDB.dll that has the function:

         public SqlDataReader getEnumValues(int enumId)
    {
        SqlDataReader reader = null;
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            SqlCommand command =
                new SqlCommand(
                    "SELECT * FROM [EnumValue] WHERE enumId LIKE '" + enumId + "';",
                    connection);
            reader = command.ExecuteReader();
            //if(reader.Read())
            //    Debug.WriteLine("Inside sqlDb->getEnumValues command = " + command.CommandText + " reader[name] = " + reader["name"].ToString() + " reader[value] = " + reader["value"].ToString() + " reader[description] = " + reader["description"].ToString());
        }
        //reader.Close();
        return reader;
    }

As you can see I have tried closing the reader before returning it, and also I read the data inside and it's ok. I'm using the function like this:

 using (SqlDataReader getEnumValuesReader = (SqlDataReader)getEnumValues.Invoke(sqlDB, getEnumValuesForEnumParam))
                    {
                        Debug.WriteLine("Success getEnumValues -- ");

                        if (getEnumValuesReader.HasRows)
                        {
                            while (getEnumValuesReader.Read())        //Loop throw all enumValues and add them to current enum
                            {
                                try
                                {
                                    values.Add(new Model.EnumValue(getEnumValuesReader["name"].ToString(), getEnumValuesReader["value"].ToString(), getEnumValuesReader["description"].ToString()));
                                    Debug.WriteLine("Value[0].name = " + values[0].Name);
                                }
                                catch (Exception ex)
                                {
                                    Debug.WriteLine("Error in building new EnumValue: " + ex.Message);
                                }
                            }
                        }

                    }

and I'm getting exception of type 'System.InvalidOperationException'

I'm guessing it has something to do with the Sqldatareader being passed.

解决方案

The SQL reader cannot exist outside the context of the SQL connection. Your connection is being disposed in your method, so your returned reader cannot fetch any data in the calling method.

the best option is to return the values from the reader instead of the reader. It is not good practice to pass around readers, which means the underlying connection etc. Is open and undisposed.

这篇关于SqlDataReader InvalidOperationException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆