ExecuteScalar throws a NullReferenceException

This code throws a NullReferenceException when it raises 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(); 
+4
source share
2 answers

I encapsulated most of my SQL logic in DAL. One of these DAL methods pulls scalar Ints using the following logic. This might work for you:

  object temp = cmnd.ExecuteScalar(); if ((temp == null) || (temp == DBNull.Value)) return -1; return (int)temp; 

I know that you have entered a lot of code above, but I think this is really the essence of your problem. Good luck

+12
source

ExecuteScalar returns null if the request was not returned (for example, when the SearchForPassenger stored procedure SearchForPassenger not return rows).

So this line:

 item = (int) command.ExecuteScalar(); 

I am trying to use null for int in this case. This will raise a NullReferenceException .

By mark the answer that just appeared, you need to check for null :

 object o = command.ExecuteScalar(); item = o == null ? 0 : (int)o; 
+6
source

All Articles