SqlDataReader InvalidOperationException

时间:2014-04-20 20:07:19

标签: c# sql-server exception sqldatareader

我有一个具有以下功能的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["name"].ToString() + " reader[value] = " + reader["value"].ToString() + " reader[description] = " + reader["description"].ToString());
        }
        //reader.Close();
        return reader;
    }

正如您所看到的那样,我在尝试关闭阅读器之前尝试关闭阅读器,并且我也阅读了内部的数据并且没问题。 我正在使用这样的功能:

 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);
                                }
                            }
                        }

                    }

我遇到类型&System; .InvalidOperationException'

的例外情况

我猜测它与传递的Sqldatareader有关。

1 个答案:

答案 0 :(得分:2)

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

最好的选择是从阅读器而不是阅读器返回值。传递读者是不好的做法,这意味着潜在的连接等是开放的和不透明的。