SqlDataReader не будет передавать NULL
значения напрямую.
Чтобы обойти это, вы можете использовать выражение T-SQL COALESCE (...) , чтобы принудительно преобразовать значения NULL в другие ненулевые значения, такие как 0
для * 1007. * column или ''
для столбцов char / nchar. Имейте в виду, что использование COALESCE для преобразования значений NULL в «магические» числа или константы может скрыть истинное значение нулевых значений. т. е. если база данных использует NULL для указания «дата не указана», но в конечном итоге вы используете «1900-01-01», чтобы указать, что в коде необходимо убедиться, что вы никогда не рассчитываете возраст Аукциона с начальной датой ». 1900-01-01 ', иначе вы в конечном итоге будете показывать эти Аукционы первым по возрасту.
SqlCommand command = new SqlCommand("SELECT Ponude.IdPonude
, COALESCE(Ponude.SifraProizvoda, -1)
, COALESCE(Proizvodi.Naziv, '')
, COALESCE(Proizvodi.Opis, '')
, COALESCE(Proizvodi.PocetnaCijena, -1)
, COALESCE(Ponude.PocetakAukcije, '1900-01-01')
, COALESCE(Users.UserName, '')
, COALESCE(Ponude.PonudjenaCijena, -1)
, COALESCE(Ponude.ZavrsetakAukcije, -1)
, COALESCE(Ponude.Status, -1)
FROM Ponude
LEFT OUTER JOIN Users ON Ponude.Kupac = Users.UserName
INNER JOIN Proizvodi ON Ponude.SifraProizvoda = Proizvodi.Id;", conn);
Кроме того, вы можете проверить, является ли каждое отдельное значение нулевым, прежде чем пытаться присвоить значение переменной, используя оператор IsNull.
if (myValue == null)
myValue = new MyValue();
myNewValue = myValue;
Другой, возможно, более элегантный способ:
myNewValue = myValue ?? new MyValue();