【问题标题】:Write Null in Database if the TextBoxes are Empty如果文本框为空,则在数据库中写入 Null
【发布时间】:2012-10-22 07:45:18
【问题描述】:

我要做的就是在文本框为空时在数据库中插入 Null。

 --ACCOUNT

 AS
 BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SET IDENTITY_INSERT account ON


  INSERT INTO dbo.account
      ( 
        AccntID                   ,
        managedby                 ,
        AccountHolder             ,
        Description               ,
        AccountType               ,
        ContactPerson             ,
        ContactNumber             ,
        EmailAddress              ,
        Address                   ,
        ClientTYpe                ,
        SchemeType                ,
        SalesManager              ,
        DateCreated               ,
        Login                     ,
        Password                  ,
        Balance                   ,
        FilterOption              ,
        Enable22                  ,
        AllowExtendedConfig                  
      ) 
-- Insert statements for procedure here

 VALUES (@AccntID, @managedby, @AccountHolder, @Description, @AccountType, @ContactPerson, @ContactNumber, @EmailAddress, @Address, @ClientType, @SchemeType, @SalesManager, @DateCreated, @Login, @Password, @Balance, @FilterOption, @Enable22, @AllowExtendedConfig)
SET IDENTITY_INSERT account OFF



END

当我的文本框为空时,向数据库添加 NULL 值的最佳方法是什么

【问题讨论】:

  • 你在用什么,ADO.NET,Entity framework,Linq-To-Sql,等等??你能显示代码插入记录的位置吗?
  • vb.net,t-sl INSERT INTO dbo.account ( AccntID ,managedby,accountholder,)
  • 提供dbo.account表的scema,提及Nullable字段。另外,请提供您需要将 DB Null 设置到哪些列。

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


【解决方案1】:

设置辅助函数如:

Public Function DbNullOrStringValue(ByVal value As String) As Object
    If String.IsNullOrEmpty(value) Then
        Return DBNull.Value
    Else
        Return value
    End If
End Function

所以第一个代码块可以通过这样的调用来简化:

Cmd.Parameters.AddWithValue("@AccntID", DbNullOrStringValue(TextBox1.Text)) 
Cmd.Parameters.AddWithValue("@managedby", DbNullOrStringValue(TextBox2.Text)) 
Cmd.Parameters.AddWithValue("@AccountHolder", DbNullOrStringValue(TextBox3.Text)) 
Cmd.Parameters.AddWithValue("@Description", DbNullOrStringValue(TextBox4.Text)) 
Cmd.Parameters.AddWithValue("@AccountType", DbNullOrStringValue(TextBox5.Text))

Cmd 是您的 SqlCommanad 对象

【讨论】:

  • 这是我的参数看起来像..我如何将我的代码与您的代码连接起来..Parameters.AddWithValue("@AccntID", TextBox1.Text) .Parameters.AddWithValue("@managedby" , TextBox2.Text) .Parameters.AddWithValue("@AccountHolder", TextBox3.Text) .Parameters.AddWithValue("@Description", TextBox4.Text) .Parameters.AddWithValue("@AccountType", TextBox5.Text)
  • 当我执行你的这个代码时会出现这个错误。重载解析失败,因为无法使用这些参数调用公共添加:'公共函数添加(文本作为字符串)作为 System.Windows.Forms.Listviewitem.Listview.Subitems)作为 System.Windows.Forms.Listviewitem.Listview.Subitem':参数匹配参数项无法从 DBNull 转换为 ListViewSubitems
  • @KristianHernanC.Manuel - 这是一个不同的问题。您的 DataSet/DataTable 具有 DBNull 值。请检查您的数据库调用是否返回任何 DBNull 值。我相信你的这个问题已经解决了,你现在正在处理其他问题。在 Winforms 和 ADO.NET 下添加有关此问题的新帖子。
【解决方案2】:

考虑比新方法更简单的方法:

    Cmd.Parameters.AddWithValue("@AccntID", IIF(String.IsNullOrEmpty(TextBox1.Text),  DBNull.Value, TextBox1.Text)) 

但对于其余部分,请按照之前的建议使用 SqlDataAdapter

【讨论】:

    【解决方案3】:

    最好的方法是继承文本框并为其添加额外的功能

    Public Class MyText
        Inherits TextBox
    
        'Either change default text property (but this will bug you while comparing text property)
        Public Overrides Property Text() As String
            Get
                Return MyBase.Text
            End Get
            Set(ByVal value As String)
                MyBase.Text = value
            End Set
        End Property
    
        'Best way will be to write new property to use in sql query
        Public ReadOnly Property TextSQL() As String
            Get
                If Me.Text = String.Empty Then
                    Return "NULL"
                Else
                    Return Me.Text
                    'Return "'" & Me.Text & "'" 'or this
                End If
            End Get
        End Property
    End Class
    

    现在在您的应用程序中使用此文本框

    cmd.Parameters.AddWithValue("@accountholder", txt_accHolder.TextSQL)
    

    【讨论】:

      【解决方案4】:

      在存储过程中,您可以使用以下内容:

      假设:参数名称为@TextData

       NULLIF(LTRIM(RTRIM(@TextData)),'')
      

      如果@TextData = '',它将返回 NULL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多