2010-03-16 4 views
1

В связи с этим вопросом, который я только что спросил - SQL - Select all when filter value is empty - по какой-то причине пустое значение TextBox не подается на SQL Сервер как NULL, как и должно быть.ASP.NET Управление текстовыми полями не возвращает NULL, когда он пуст

Любые идеи о том, как исправить это?

+0

Что заставляет вас думать, что пустое текстовое поле должно стать «NULL» SQL Server? –

+0

Ну, логика указала бы, что, когда текстовое поле пуст, его значение равно NULL. Я имею в виду, что еще может быть его ценность? – ian93

+1

'null' на языке программирования не обязательно связан с' NULL' в реляционной базе данных. –

ответ

16

Пустым текстовым полем будет string.Empty, а не null.

Из TextBox.Text documentation:

Свойство Значение
Тип: System.String
текст, отображаемый в элементе управления TextBox. По умолчанию используется пустая строка ("").

Если вы хотите, чтобы убедиться, что он идет в базу данных как null, а затем преобразовать его на пути в:

string value = !string.IsNullOrEmpty(tb.Text) ? tb.Text: null; 
-1

Установите значение параметра по умолчанию в коде ASP для null.

+0

nope, это жестко запрограммировано ... взгляните на мой ответ :) –

+0

Я не понимаю ... Я как-то получил 10 баллов за это, а затем отрицательный 2. Я предполагаю, что он был проголосован, а затем проголосовали ? – Albert

+0

правильный ... это был я, из-за вашего недействительного заявления –

0

Вы можете сделать это без каких-либо C#.

Просто установить параметры ConvertEmptyStringToNull свойство истинно, например:

<asp:ObjectDataSource runat="server" ID="ObjectDataSourceExample" TypeName="Example.ExampleTableAdapter" SelectMethod="GetDataBySomething"> 
    <SelectParameters> 
     <asp:ControlParameter Name="Something" ConvertEmptyStringToNull="true" ControlID="tbSomething" /> 
    </SelectParameters> 
</asp:ObjectDataSource> 
+0

Это, похоже, не работает для меня. – ian93

+0

В любом случае значение по умолчанию равно true: «true, если значение, связанное с параметром, должно быть преобразовано в нулевую ссылку nullNothingnullptra (Nothing в Visual Basic), когда это String .. ::. Empty, в противном случае - false. значение истинно ». (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.parameter.convertemptystringtonull.aspx – ian93

+0

Является ли параметр вашего запроса установленным как нулевой в вашем наборе данных? – Sophia

4

только просветить вас :)

это от отражателя:

public virtual string Text 
{ 
    get 
    { 
     string str = (string) this.ViewState["Text"]; 
     if (str != null) 
     { 
      return str; 
     } 
     return string.Empty; 
    } 
    set 
    { 
     this.ViewState["Text"] = value; 
    } 
} 
+0

любая причина для нисходящего ? –

+0

Спасибо, что показали нам, что на самом деле делает Framework, и устраняя любые сомнения. –

0

"" "Значение свойства Тип: System.String Текст, отображаемый в элементе управления TextBox. По умолчанию используется пустая строка (""). "" "

Aaronaught правильный.

Null - очень свободно используемый термин, и его не должно быть, и его можно легко смутить с помощью «Ничего», которое гораздо лучше использовать при программировании. Значение textbox.text никогда не будет равно null, оно будет «". Ничто не означает, что вы инициализировали строковую переменную или нет. оооочень

the textbox itself could = Nothing 
the textbox.text can only equal "" (or string.empty - function does the same thing) if the textbox isnot nothing 

Это общее хорошее правило использовать String.Empty или «», когда речь содержит ли строка символы

Очевидно, что вы используете В параметре в Уре SqlCommand должно быть пустым или нет так ...

в VB:

If TextBox.Text = "" Then 
VariableUsedInSqlCommand = Nothing 
End If 

От нее вы можете установить значение по умолчанию в в параметре SP или инлайн SqlCommand быть Null, поэтому, когда он recieves в параметров ter Is Nothing, он возвращает значение paramater = Null

В сохраненной процедуре (если вы отправляете текстовое поле.текстовое значение непосредственно в SP Paramater):