我有一个表单和存储过程,用于插入表单中的数据。它工作正常,但如果没有填写字段,则不会在SQL中插入NULL
,而是插入""
。
我尝试过几种不同的方法但似乎没有插入NULL
,下面的那些仍会插入""
,是否有人能指出我正确的方向?
以下是代码所需的部分,如果您需要更多信息,请告诉我。
Dim rdr As SqlDataReader
Dim cmdInsert As SqlCommand = New SqlCommand()
cmdInsert.CommandText = "spPersonalDetailsInsert"
cmdInsert.CommandType = CommandType.StoredProcedure
cmdInsert.Connection = connSQL
Dim firstname, lastname, address, address1, town, county, postcode As SqlParameter
'convert to null if ""
Dim frmFirstName As String
If pd_first_name.Text = "" Then
frmFirstName = Convert.DBNull
Else
frmFirstName = pd_first_name.Text
End If
firstname = New SqlParameter()
firstname.ParameterName = "@firstname"
firstname.SqlDbType = SqlDbType.NVarChar
firstname.Size = 50
firstname.Direction = ParameterDirection.Input
firstname.Value = frmFirstName
修改
我测试了以下代码:
If pd_first_name.Text = "" Then
frmFirstName = DBNull.Value
Else
frmFirstName = pd_first_name.Text
End If
但它仍然没有插入NULL
所以我测试了这个:
If pd_first_name.Text = "" Then
Response.Write("NULL")
address1.Value = DBNull.Value
Else
Response.Write("NOT NULL")
address1.Value = pd_address1.Text
End If
因此,如果我在address1
字段中不输入任何内容,则应将NULL
写入屏幕,但它始终会写入NOT NULL
。空表格字段等于什么?在经典ASP中它总是""
。
答案 0 :(得分:21)
您需要使用DBNull.Value
If String.IsNullOrEmpty(pd_first_name.Text.ToString().Trim) = true Then
frmFirstName = DBNull.Value
Else
frmFirstName = pd_first_name.Text
End If
答案 1 :(得分:1)
为什么你甚至设置它为null?
If pd_first_name.Text <> "" Then
frmFirstName = pd_first_name.Text
firstname = New SqlParameter()
firstname.ParameterName = "@firstname"
firstname.SqlDbType = SqlDbType.NVarChar
firstname.Size = 50
firstname.Direction = ParameterDirection.Input
firstname.Value = frmFirstName
End If
答案 2 :(得分:1)
在我的情况下,使用&#39; Nothing&#39; 解决了这个问题。像这样使用它
If String.IsNullOrEmpty(pd_first_name.Text) = True Then
frmFirstName = Nothing
Else
frmFirstName = pd_first_name.Text
End If
答案 3 :(得分:0)
我认为你的问题是frmFirstName
是一个字符串而一个字符串不能代表DBNull。
我认为这可以解决您的问题(我刚刚注释掉了您的代码):
Dim rdr As SqlDataReader
Dim cmdInsert As SqlCommand = New SqlCommand()
cmdInsert.CommandText = "spPersonalDetailsInsert"
cmdInsert.CommandType = CommandType.StoredProcedure
cmdInsert.Connection = connSQL
Dim firstname, lastname, address, address1, town, county, postcode As SqlParameter
'convert to null if ""
Dim frmFirstName As String
'If pd_first_name.Text = "" Then
' frmFirstName = Convert.DBNull
'Else
' frmFirstName = pd_first_name.Text
'End If
firstname = New SqlParameter()
firstname.ParameterName = "@firstname"
firstname.SqlDbType = SqlDbType.NVarChar
firstname.Size = 50
firstname.Direction = ParameterDirection.Input
If pd_first_name.Text = "" Then
firstname.Value = DBNull.Value
Else
firstname.Value = frmFirstName
End If
答案 4 :(得分:0)
创建存储过程时,将这些列设为null,可以为null。 像
CREATE PROCEDURE [dbo].[USP_TDS_SaveRecod]
@ID INT,
@CODE INT,
@FIRSTNAME VARCHAR(8)=NULL,
@CITY VARCHAR(15)=NULL
AS
BEGIN
.........................
.........................
.........................
END
然后在代码中不添加那些为null的参数。
cmd.Parameters.Add("@ID", SqlDbType.Int).Value = obj.ID;
cmd.Parameters.Add("@CODE", SqlDbType.Int).Value = obj.CODE;
if(pd_first_name.Text != "")
{
cmd.Parameters.Add("@FIRSTNAME", SqlDbType.VarChar).Value = pd_first_name.Text;
}
if(city.Text != "")
{
cmd.Parameters.Add("@CITY", SqlDbType.VarChar).Value = pd_first_name.Text;
}
答案 5 :(得分:0)
Dim TempStr As String
TempStr= "spPersonalDetailsInsert"
TempStr = TempStr.Replace("''", "null")
cmdInsert.CommandText = TempStr
现在无需使用
If pd_first_name.Text = "" Then
Response.Write("NULL")
address1.Value = DBNull.Value
Else
Response.Write("NOT NULL")
address1.Value = pd_address1.Text
End If
希望这可能会有所帮助
答案 6 :(得分:0)
If RdFree.Checked = True Then
Dim nu As String = "NULL"
UpdPolicys.Append(", AccIDFree = " & nu & " , AccTypeIDFree = " & nu & " ")
End If