我已经做了很多次了,但现在我遇到了一个错误,我不知道如何修复它。变量不是null,它们有值;我在DB中尝试了这个,一切都好,它返回1行
List<Partido_E> lista = new List<Partido_E>();
try
{
conexion = bd.LeerDeBaseDeDatos();
orden = new OracleCommand(
@"select * from partido
where TO_CHAR(fecha, 'DD/MM/YYYY') = :anyo AND
equipo_l = :equipol AND
equipo_v = :equipov ", conexion);
orden.Parameters.Add(new OracleParameter("anyo", fecha));
orden.Parameters.Add(new OracleParameter("equipol", equipoL));
orden.Parameters.Add(new OracleParameter("equipov", equipoV));
orden.BindByName = true;
lector = orden.ExecuteReader();
while(lector.Read())
{
lista.Add(new Partido_E(lector.GetString(0),
lector.GetString(1),
lector.GetDateTime(2),
lector.GetString(3),
lector.GetString(4),
lector.IsDBNull(5) ? 0 : lector.GetInt32(5),
lector.IsDBNull(6) ? 0 : lector.GetInt32(6),
lector.IsDBNull(7) ? 0 : lector.GetInt32(7)
));
}
lector.Close();
lector.Dispose();
orden.Dispose();
bd.CerrarConexion();
}
catch (Exception e)
{
Console.WriteLine("Error " + e.ToString());
Console.ReadLine();
}
return lista;
这是您的问题-阅读评论
while (lector.Read())
{
// if you never come here, your reader is closed
}
lector.Close(); // <-- problem here
Oracle:
OracleDataReader实例是通过调用OracleCommand对象的ExecuteReader方法构建的关闭或处置DataReader后,只能访问IsClosed和RecordsAffected属性。
此行lector.Read()
不能抛出null引用异常,因为lector = orden.ExecuteReader();
之前的行将始终返回reader。如果没有行,它将被关闭。
你的代码没有被很好地破解。应该是
using (conn = new connection/getconnection)
{
using (cmd = new command)
{
using (reader = cmd.ExecuteReader)
{
} // no need to explicitly dispose/close here
}
}