Ce code lève une NullReferenceException
lorsqu'il appelle ExecuteScalar
:
selectedPassengerID = 0; //SqlCommand command = GenericDataAccess.CreateCommand(); // 2nd test ssortingng connectionSsortingng = ""; SqlConnection conn; connectionSsortingng = ConfigurationManager. ConnectionSsortingngs["ConnST-MHM"].ConnectionSsortingng; conn = new SqlConnection(connectionSsortingng); 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.Ssortingng; command.Parameters.Add(param); param = command.CreateParameter(); param.ParameterName = "@flightDate"; param.Value = date; param.DbType = DbType.Ssortingng; 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();
J'ai encapsulé la plupart de ma logique SQL dans un DAL. Une de ces methods DAL tire Ints scalaires en utilisant la logique suivante. Cela peut fonctionner pour vous:
object temp = cmnd.ExecuteScalar(); if ((temp == null) || (temp == DBNull.Value)) return -1; return (int)temp;
Je sais que vous avez entré beaucoup de code ci-dessus mais je pense que c'est vraiment l'essence de votre problème. Bonne chance!
ExecuteScalar
renvoie null si aucun logging n'a été renvoyé par la requête (par exemple, lorsque votre procédure stockée SearchForPassenger
ne renvoie aucune ligne).
Donc cette ligne:
item = (int) command.ExecuteScalar();
Essaie de lancer null
à un int
dans ce cas. Cela va NullReferenceException
une NullReferenceException
.
Selon la réponse de Mark qui vient d'apparaître, vous devez vérifier null
:
object o = command.ExecuteScalar(); item = o == null ? 0 : (int)o;