2011-01-18 19 views
14

Tengo un formulario y un procedimiento almacenado que inserta los datos del formulario. Funciona bien, excepto que si un campo no está lleno, no inserta un NULL en SQL, inserta "".Cómo insertar NULL en la base de datos si el campo de formulario está vacío

He intentado algunas formas diferentes pero ninguna parece insertar NULL, la que sigue aún inserta "", ¿alguien puede indicarme la dirección correcta?

Aquí está la parte requerida del código, si necesita más solo hágamelo saber.

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 

EDITAR

He probado el siguiente código:

If pd_first_name.Text = "" Then 
      frmFirstName = DBNull.Value 
     Else 
      frmFirstName = pd_first_name.Text 
     End If 

Sin embargo, todavía no se inserta NULL así que prueban esto:

  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 

Así que si yo no ingrese nada en el campo address1 shou ld escribe NULL a la pantalla pero siempre escribe NOT NULL. ¿Qué es igual a un campo de formulario vacío? en el clásico ASP siempre fue "".

Respuesta

20

Es necesario utilizar DBNull.Value

  If String.IsNullOrEmpty(pd_first_name.Text.ToString().Trim) = true Then 
       frmFirstName = DBNull.Value 
      Else 
       frmFirstName = pd_first_name.Text 
      End If 
+0

Acabo de probar anteriormente y todavía no inserta NULL, vea la pregunta editada arriba, gracias. – JBoom

+0

Esto realmente funciona, es mi culpa, estaba haciendo referencia al campo de formulario incorrecto en mi código editado, gracias Barry. – JBoom

0

Creo que su problema es que frmFirstName es una cadena y una cadena no puede representar DBNull.

creo que esto va a resolver su problema (yo sólo he comentado a cabo su código):

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 
2

por qué ni siquiera establece que si es nulo?

 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 
+0

Es un elemento de formulario, si no se introduce nada es igual a "" no es NULL. – JBoom

0

bien la creación de procedimiento almacenado hacer esas columnas como NULL que puede ser nula .. como

CREATE PROCEDURE [dbo].[USP_TDS_SaveRecod] 

@ID INT, 

@CODE INT, 

@FIRSTNAME VARCHAR(8)=NULL, 

@CITY VARCHAR(15)=NULL 

AS 

BEGIN 

    ......................... 

    ......................... 

    ......................... 
END 

y luego en el código no lo hacen agregue los parámetros que son nulos.

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; 
} 
0
Dim TempStr As String 
TempStr= "spPersonalDetailsInsert" 
TempStr = TempStr.Replace("''", "null") 
cmdInsert.CommandText = TempStr 

Ahora hay necesidad de utilizar

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 

la esperanza que esto podría ser útil

0

En mi caso usando 'Nada' soluciona el problema. Utilizar de esta manera

If String.IsNullOrEmpty(pd_first_name.Text) = True Then 
    frmFirstName = Nothing 
Else 
    frmFirstName = pd_first_name.Text 
End If 
0
If RdFree.Checked = True Then 
    Dim nu As String = "NULL" 
    UpdPolicys.Append(", AccIDFree = " & nu & " , AccTypeIDFree = " & nu & " ") 
End If 
Cuestiones relacionadas