【问题标题】:ASP.Net Textbox control doesn't return NULL when it is emptyASP.Net 文本框控件为空时不返回 NULL
【发布时间】:2010-03-16 02:02:23
【问题描述】:

关于我刚刚提出的这个问题 -- SQL - Select all when filter value is empty -- 似乎出于某种原因,一个空的TextBox 的值没有作为 NULL 提供给 SQL Server,因为它应该是。

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 是什么让您认为空文本框应该变成NULL 到 SQL Server?
  • 嗯,逻辑会说明当文本框为空时,其值为 NULL。我的意思是,它还有什么价值?
  • 编程语言中的 null 不一定与关系数据库中的 NULL 相关。
  • 您可能还想说明如何将数据发送到 SQL Server。
  • 回复:我如何将数据发送到 SQL Server:ASP.net AJAX。 DataList 位于将 TextBox.TextChanged 设置为其触发器之一的 UpdatePanel 中。这一切都必须改变,因为我显然需要对 Textbox 值做一些 C# 级别的东西。

标签: asp.net sql-server ado.net


【解决方案1】:

空文本框将包含string.Empty,而不是null

来自TextBox.Text documentation

物业价值
类型:System.String
TextBox 控件中显示的文本。 默认为空字符串 ("")。

如果你想确保它以null 的身份进入数据库,那么在输入的过程中进行转换:

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

【讨论】:

    【解决方案2】:

    只是为了启发你:)

    这是来自反射器:

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

    【讨论】:

    • 感谢您向我们展示了框架的实际作用,并消除了任何疑问。
    【解决方案3】:

    您无需任何 C# 即可做到这一点。

    只需将参数 ConvertEmptyStringToNull 属性设置为 true,例如:

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

    【讨论】:

    • 反正默认值是true:"如果Parameter绑定的值是String..::.Empty时应该转换为nullNothingnullptra空引用(Visual Basic中为Nothing)为true ; 否则为 false。默认值为 true。" (msdn.microsoft.com/en-us/library/…
    • 您的查询参数是否在数据集中设置为可为空?
    【解决方案4】:

    """属性值 类型:System.String TextBox 控件中显示的文本。默认为空字符串 ("")。"""

    Aaronaught 是正确的。

    Null 是一个使用非常松散的术语,不应该使用,并且很容易与“Nothing”混淆,后者更适合在编程中使用。 textbox.text 值永远不会为空,它将是“”。什么都不是指您是否已初始化字符串变量。太棒了

    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 中使用的 Paramater 需要为 null 或者不是这样......

    在 VB 中:

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

    从她那里,您可以将 SP 或 Inline SqlCommand 中的默认参数值设置为 Null,因此当它收到 Is Nothing 的参数时,它会将参数恢复为 = Null

    在存储过程中(如果您将 textbox.text 值直接发送到 SP 参数):

    If (@Paramater = "") 
    Begin
    
    end
    else
    begin
    
    end
    

    【讨论】:

      【解决方案5】:

      设置ASP代码中的默认参数值为null

      【讨论】:

      • 我不明白...我不知何故得到了 10 分,然后是负分 2。我猜它被投赞成票,然后被投反对票?
      猜你喜欢
      • 2011-10-30
      • 2017-10-11
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 2010-11-10
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多