SqlDataReader InvalidOperationException

本文关键字:InvalidOperationException SqlDataReader | 更新日期: 2023-09-27 17:59:04

我有一个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有关。

SqlDataReader InvalidOperationException

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

最好的选择是从读取器而不是读取器返回值。传递给读者是不好的做法,这意味着潜在的联系等是公开和不公开的。

相关文章:
  • 没有找到相关文章