У меня проблема, это работает, если возвращаемое значение не равно нулю, однако я получаю System.NullreferenceException
, когда возвращаемое значение равно нулю. Я пробовал много вещей, но не могу их взломать. Любая помощь здесь будет оценена по достоинству.
string HwPlts = "select top 1 plts from (select sum(ISNULL(Heywood_Plts, 0)) as plts, date_Uploaded, time_Uploaded, Upload_ID from InboundRawData Group by date_Uploaded, time_Uploaded, dispatch_Date, Upload_ID having dispatch_Date = @prod_Date) as p order by Upload_ID desc";
SqlCommand cmd1001 = new SqlCommand(HwPlts, connection);
cmd1001.Parameters.AddWithValue("@prod_Date", dateTimePicker1.Text);
HWplt.Text = cmd1001.ExecuteScalar().ToString();
Если cmd1001.ExecuteScalar()
возвращает значение null, значит, вы пытаетесь вызвать ToString()
значение null. Вот что вызывает исключение. cmd1001.ExecuteScalar()?.ToString()
означает, что если первая часть возвращает null, не вызывать ToString()
— просто вернуть null. Но если результат не нулевой, верните ToString()
.
Хороший! Просто так. Спасибо
Проблема в этой строке:
HWplt.Text = cmd1001.ExecuteScalar().ToString();
Вместо этого используйте
HWplt.Text = Convert.ToString(cmd1001.ExecuteScalar());
Это позволяет избежать исключения нулевой ссылки, поскольку Convert.ToString()
является статическим методом. ToString()
, напротив, является методом экземпляра, который зависит от реализации конкретного объекта, который вы конвертируете в строку.
Обновлено: я должен добавить, что в большинстве случаев считается хорошей практикой использовать Convert.ToString()
, а не Object.ToString()
.
...cmd1001.ExecuteScalar()?.ToString();