asp.net - mysqlcommand - executexmlreader
ExecuteScalar lanza NullReferenceException (2)
Este código arroja una NullReferenceException
cuando llama ExecuteScalar
:
selectedPassengerID = 0;
//SqlCommand command = GenericDataAccess.CreateCommand();
// 2nd test
string connectionString = "";
SqlConnection conn;
connectionString = ConfigurationManager.
ConnectionStrings["ConnST-MHM"].ConnectionString;
conn = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand();
command.CommandType = CommandType.StoredProcedure ;
command.Connection = conn;
command.CommandText = "SearchForPassenger";
SqlParameter param;
param = command.CreateParameter();
param.ParameterName = "@name";
param.Value = pName; // Session[""];
param.DbType = DbType.String;
command.Parameters.Add(param);
param = command.CreateParameter();
param.ParameterName = "@flightDate";
param.Value = date;
param.DbType = DbType.String;
command.Parameters.Add(param);
param = command.CreateParameter();
param.ParameterName = "@ticketNo";
param.Value = ticketNumber;
param.DbType = DbType.Int32;
command.Parameters.Add(param);
int item;
command.Connection.Open();
item = (int)command.ExecuteScalar();
He encapsulado la mayor parte de mi lógica de SQL en un DAL. Uno de estos métodos DAL extrae Ints escalares utilizando la siguiente lógica. Puede funcionar para usted:
object temp = cmnd.ExecuteScalar();
if ((temp == null) || (temp == DBNull.Value)) return -1;
return (int)temp;
Sé que has ingresado un montón de código anterior, pero creo que esta es realmente la esencia de tu problema. ¡Buena suerte!
ExecuteScalar
devuelve nulo si la consulta no devolvió ningún registro (por ejemplo, cuando el procedimiento almacenado SearchForPassenger
no devuelve filas).
Entonces esta línea:
item = (int) command.ExecuteScalar();
Está intentando lanzar null
a un int
en ese caso. Eso NullReferenceException
una NullReferenceException
.
Según la respuesta de Mark que acaba de aparecer, debe verificar null
:
object o = command.ExecuteScalar();
item = o == null ? 0 : (int)o;