2014-07-09 4 views
0

Я работаю с несколькими формами, и до сих пор я понял, что действительно нет способа взять пустое текстовое поле и вставить его в базу данных как null.Возьмем пустое текстовое поле как null

, например, если текстовое поле пусто в:

<asp:TextBox id="tb0" runat="server"></asp:TextBox> 
<asp:TextBox id="tb1" runat="server"></asp:TextBox> 
<asp:TextBox id="tb2" runat="server"></asp:TextBox> 

Но заполнили текстовые поля, окружающие его

Есть ли способ для запроса к, при запуске, выглядеть следующим образом:

INSERT INTO table_name VALUES ('test0', null, 'test2') 

Вместо того, чтобы прокручивать и изменять значения в пробелы? Пробельное прекрасно, когда они VARCHAR поля, но и для целых чисел/даты это очень раздражает

Вот часть одного из моих вставок

"INSERT INTO Customer VALUES(" + custID + " , @mastName, @custName, @addrLn1, @addrLn2, @cCity, @cState, @cZip, @cZip4, @cCountry, @cusSince, @renewalDate)" 

BTW CustID не является параметр, поскольку он является поплавком и когда я поставил его в качестве параметра значение испортится (например, 105,05 превратится в 105.0498 ..)

+0

Можете ли вы показать код, в котором вы фактически готовите и выполняете вставки базы данных? –

+0

Если вы начнете с параметризованных запросов (как и должно быть), вам будет легко указать DBNull как тип параметра столбца с возможностью NULL ... Это уже описано в http://stackoverflow.com/questions/16717179/how-to- insert-null-value-in-database-through-parameterized-query –

+0

Я обновил OT и исправил, если я ошибаюсь, но DBNull выглядит так, будто он подготавливает поле к нулю, это необязательно? Это то, что он делает? Я новичок в C#, так голый со мной .. edit: после прочтения какой-то темы я вижу, что вы имеете в виду, я дам этот выстрел – brianforan

ответ

2

вы можете использовать простой способ:

object ToDBValue(string str) 
{ 
    return string.IsNullOrEmpty(str) ? DBNull.Value : (object)str; 
} 

Тогда вы могли бы построить свои параметры:

command.Parameters.AddWithValue("@VAL1", ToDBValue(tb0.Text)); 
command.Parameters.AddWithValue("@VAL2", ToDBValue(tb1.Text)); 
command.Parameters.AddWithValue("@VAL3", ToDBValue(tb2.Text)); 

А затем измените запрос:

INSERT INTO table_name VALUES (@VAL1, @VAL2, @VAL3) 
+0

+1. Пожалуйста, рассмотрите пример, показывающий, как создать параметризованный запрос (или просто добавить ссылку на MSDN/SO для этого), поскольку OP не имеет. –

+0

Извините, что у меня была моя параметризация в моем действительном коде, я обновил op – brianforan

+0

@ itsme86, это сделало мой cmd больше не работать, когда я добавил метод в – brianforan

0

Если вы используете хранимую процедуру с параметрами, которые вы можете сделать значение paramenter DBNull.Value

1

использования DBNull.Value, который даст вам Null для конкретного значения в ряд. Поэтому, если вы проверяете, является ли текстовое поле нулевым. Просто используйте что-то вдоль линий ! String.IsNullOrWhitespace (tb0.Text)? tb0.Text: DBNull.Value

0

Вы можете изменить хранимую процедуру? Если это так, вы можете сделать параметр опционным, по умолчанию NULL и просто не пройти, это значение IsNullOrEmpty.

Смежные вопросы