Автоматично конвертиране на .Net null в DBNull.Value?

Написах помощна програма за обработка на добавяне на стойности към параметри на данни за ръчно превъртане на sql заявки. Потреблението изглежда

utility.Add("SELECT * FROM MyTable WHERE MyColumn = {0}", myVariable, DBType.TheType);

or

utility.Add("UPDATE MyTable SET MyColumn = {0}", myVariable, DBType.TheType);

Как трябва да се обработва нулева стойност за myVariable?

  1. На всички ценности трябва да се вярва напълно. Отговорността е единствено на потребителя. Как потребителят ще разбере, че нулата ще бъде обработена така или иначе?
  2. null никога не може да работи, така че трябва да хвърли NullArgumentException. Защо да продължим?
  3. null трябва автоматично да се интерпретира като DBNull.Value, тъй като това е единственото жизнеспособно решение. Това е помощна програма, нали? Направете го използваем и изсушете малко код!

Незадължителен бонус въпрос: Ако тези аргументи бяха направени от трима политически кандидати, кои биха били техните партии? (Моля, посочете родната страна на тези страни)


person StarTrekRedneck    schedule 16.08.2011    source източник
comment
Питате ли за нулеви стойности, върнати от заявката, или нулеви стойности, предадени като стойност на myVariable?   -  person Joe White    schedule 17.08.2011
comment
Създадох малка обвивка на sqlparameter, за да се справя с null и друго основно валидиране на ниско ниво, така че можете основно да хвърлите каквото и да е в него като стойност и в крайна сметка ще се окаже като идеално безопасни нормализирани данни. Превеждам нули в dbnull.value   -  person David    schedule 17.08.2011
comment
null се предава в помощната програма, която създава dbcommand с командния текст и параметри   -  person StarTrekRedneck    schedule 17.08.2011
comment
Не мисля, че бонусният въпрос е съвсем подходящ...   -  person BoltClock    schedule 17.08.2011
comment
Добавих допълнителен случай на употреба към въпроса, за да изясня допълнително. Благодаря @Joe White.   -  person StarTrekRedneck    schedule 17.08.2011
comment
-1 за намесване на политика в справедлив научен въпрос.   -  person Rumplin    schedule 17.08.2011


Отговори (2)


Разтърсете Null Coalescing Op:

Във вашата добавка поставете друг параметр за =... utility.Add("SELECT * FROM MyTable WHERE MyColumn {0}{1}", myVariable, DBType.TheType);

Когато форматирате низа в метода Add: ... = String.Format(sql,myVariable is null ? " IS " : " = ", myVariable ?? "Null"

Вероятно ще искате да разясните това малко, например, придържайте се към параметър on и хвърлете временен stringbuilder; може да се наложи да използва и конструкцията ?/: за типа, където и да се използва. Късмет.

person FastAl    schedule 17.08.2011

Null е валиден параметър на заявка, не е необходимо да го конвертирате в DBNull, за да го използвате в заявка.

person Charles Graham    schedule 16.08.2011
comment
Да, но не можете да използвате Column = NULL, тя трябва да бъде IS NULL. Което показаният пример на String.Format не обработва. - person ta.speot.is; 17.08.2011