J'ai un formulaire et une procédure stockée qui insère les données du formulaire. Cela fonctionne bien, sauf que si un champ n'est pas rempli, il n'insère pas une NULL
dans SQL, il insère ""
.
J'ai essayé plusieurs méthodes mais aucune ne semble insérer NULL
, celle ci-dessous insère toujours ""
. Quelqu'un peut-il m'orienter dans la bonne direction?
Voici la partie requise du code, si vous avez besoin de plus, faites le moi savoir.
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
MODIFIER
J'ai testé le code suivant:
If pd_first_name.Text = "" Then
frmFirstName = DBNull.Value
Else
frmFirstName = pd_first_name.Text
End If
Mais il n’insère toujours pas NULL
et j’ai testé ceci:
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
Donc, si je n'entre rien dans le champ address1
, il devrait écrire NULL
à l'écran mais il écrit toujours NOT NULL
. Qu'est-ce qu'un champ de formulaire vide est égal? dans ASP classique, il a toujours été ""
.
Vous devez utiliser DBNull.Value
If String.IsNullOrEmpty(pd_first_name.Text.ToString().Trim) = true Then
frmFirstName = DBNull.Value
Else
frmFirstName = pd_first_name.Text
End If
pourquoi vous le définissez même s'il est nul?
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
Dans mon cas, utiliser 'Rien' résout le problème. Utilisez-le comme ça
If String.IsNullOrEmpty(pd_first_name.Text) = True Then
frmFirstName = Nothing
Else
frmFirstName = pd_first_name.Text
End If
Dim TempStr As String
TempStr= "spPersonalDetailsInsert"
TempStr = TempStr.Replace("''", "null")
cmdInsert.CommandText = TempStr
Maintenant, pas besoin d'utiliser
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
J'espère que cela pourrait être utile
Je pense que votre problème est que frmFirstName
est une chaîne et une chaîne ne peut pas représenter DBNull.
Je pense que cela résoudra votre problème (je viens de commenter votre 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
If RdFree.Checked = True Then
Dim nu As String = "NULL"
UpdPolicys.Append(", AccIDFree = " & nu & " , AccTypeIDFree = " & nu & " ")
End If
Lors de la création de la procédure stockée, définissez ces colonnes sur null, qui peut être null ...__
CREATE PROCEDURE [dbo].[USP_TDS_SaveRecod]
@ID INT,
@CODE INT,
@FIRSTNAME VARCHAR(8)=NULL,
@CITY VARCHAR(15)=NULL
AS
BEGIN
.........................
.........................
.........................
END
et puis dans le code ne pas ajouter ces paramètres qui sont nuls ..
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;
}