I have a form and stored procedure that inserts the data from the form. It works fine except that if a field isn\'t filled in it doesn\'t insert a NULL
into SQL
I think you problem is that frmFirstName
is a string and a string cannot represent DBNull.
I think this will solve your problem (I've just commented out your code):
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
While creating stored procedure make those columns as null which can be null.. like
CREATE PROCEDURE [dbo].[USP_TDS_SaveRecod]
@ID INT,
@CODE INT,
@FIRSTNAME VARCHAR(8)=NULL,
@CITY VARCHAR(15)=NULL
AS
BEGIN
.........................
.........................
.........................
END
and then in code don't add those parameters which are 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;
}
If RdFree.Checked = True Then
Dim nu As String = "NULL"
UpdPolicys.Append(", AccIDFree = " & nu & " , AccTypeIDFree = " & nu & " ")
End If
why you even set it if it is 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
You need to use DBNull.Value
If String.IsNullOrEmpty(pd_first_name.Text.ToString().Trim) = true Then
frmFirstName = DBNull.Value
Else
frmFirstName = pd_first_name.Text
End If
Dim TempStr As String
TempStr= "spPersonalDetailsInsert"
TempStr = TempStr.Replace("''", "null")
cmdInsert.CommandText = TempStr
Now No Need to use
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
Hope this might be Helpful