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有关。
SQL读取器不能存在于SQL连接的上下文之外。您的连接正在方法中处理,因此返回的读取器无法在调用方法中获取任何数据。
最好的选择是从读取器而不是读取器返回值。传递给读者是不好的做法,这意味着潜在的联系等是公开和不公开的。