2012-10-22 57 views
1

我只想在文本框为空时向数据库插入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值添加到时我的文本框为空数据库的最佳方式

+0

你在用什么,ADO.NET,实体框架,Linq-To-Sql等?你可以显示你想要插入记录的代码吗? –

+0

vb.net,叔SL INSERT INTO dbo.account ( AccntID,的ManagedBy,账户持有,) –

+1

dbo.account'表中的'提供scema,提'Nullable'字段。另外,提供您需要设置DB Null的列。 –

回答

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对象

+0

这是我的参数看起来像..如何将我的代码连接到您的代码.. .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) –

+0

此错误出现时我执行你的这个代码。 重载解析失败,因为不能使用这些参数调用公共添加: '公共函数添加(文本为字符串)由于 System.Windows.Forms.Listviewitem.Listview.Subitems)由于 System.Windows.Forms.Listviewitem.Listview .Subitem': 参数匹配参数项无法从DBNull转换为ListViewSubitems –

+1

@ KristianHernanC.Manuel - 这是一个不同的问题。你的DataSet/DataTable具有DBNull值。请检查您的数据库调用是否返回任何DBNull值。我相信你的这个问题已经解决了,你现在正在处理其他的问题。在Winforms和ADO.NET下添加一个包含此问题的新帖子。 –

0

的最佳方式将是继承文本框,并把它添加额外的功能

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) 
1

考虑比新方法的清淡:

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

但是对于其余的,请使用SqlDataAdapter如前所述。

0

在你可以使用下面的存储过程:

假设:参数名称是@TextData

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

它将返回NULL @TextData = ''。

相关问题