我有一个具有以下功能的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有关。
答案 0 :(得分:2)
SQL阅读器不能存在于SQL连接的上下文之外。您的连接正在您的方法中处理,因此您返回的阅读器无法在调用方法中获取任何数据。
最好的选择是从阅读器而不是阅读器返回值。传递读者是不好的做法,这意味着潜在的连接等是开放的和不透明的。