OracleDataReader Read(); return false and System.NullReferen



我已经做了很多次了,但现在我遇到了一个错误,我不知道如何修复它。变量不是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
}
} 

最新更新