net mysqlcommand executexmlreader executereader ejemplo asp asp.net sql-server

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;