none
insertar registros con campos nulos. RRS feed

  • Pregunta

  • Hola:

    Estoy empezando a trabajar con entity framework y procedimientos almacenados y me he encontrado con el problema de al insertar un registro como poner los elementos nulos.

    El procedimiento almacenado es el siguiente:

    USE [Gestion]
    GO
    /****** Object:  StoredProcedure [dbo].[SP_ClientesInsert]    Script Date: 11/10/2012 22:21:11 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:	<Description,,>
    -- =============================================
    ALTER PROCEDURE [dbo].[SP_ClientesInsert]
    	-- Add the parameters for the stored procedure here
    	@Nombre	nvarchar(100),
    	@Domicilio	nvarchar(200) = null,
    	@Poblacion	nvarchar(50) = null,		
    	@Provincia	int = null,
    	@CP	nvarchar(10) = null,
    	@Pais	nvarchar(2) = null,
    	@CIF	nvarchar(12) = null,
    	@Telf1	nvarchar(15) = null,
    	@Telf2	nvarchar(15) = null,
    	@Fax	nvarchar(15) = null,
    	@Movil	nvarchar(15) = null,
    	@email	nvarchar(50) = null ,
    	@web	nvarchar(50) = null,
    	@CtaConta	nvarchar(50),
    	@FCreacion	datetime,
    	@Baja	bit,
    	@FBaja	datetime = null,
    	@FModificacion	datetime,
    	@TipoIva	int = null,
    	@Recargo	bit = null
    
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
    
        -- Insert statements for procedure here
    	INSERT INTO Clientes
                          (Nombre, Domicilio, Poblacion, Provincia, CP, Pais, CIF, Telf1, Telf2, Fax, Movil, email, web, CtaConta, FCreacion, Baja, FBaja, FModificacion, TipoIva, Recargo)
    VALUES     (@Nombre,@Domicilio,@Poblacion,@Provincia,@CP,@Pais,@CIF,@Telf1,@Telf2,@Fax,@Movil,@Email,@Web,@CtaConta,@FCreacion,@Baja,@FBaja,@FModificacion,@TipoIva,@Recargo)
    END
    

    Luego en cada campo de la tabla que permite nulos en el archivo *.edmx he puesto en "Acepta valores NULL = true"

    Y cuando intento ejecutar el procedimiento almacenado de entity framework, pongo lo siguiente, dándome error en dbnull.value:

     Dim contex As New GestionLlaveSQLEntities
    
               
    
                If _IdCliente = 0 Then
                    Dim q As Integer = contex.SP_ClientesInsert(tbNombre.Text, tbDireccion.Text, tbPoblacion.Text, _
                                             cbProvincia.SelectedValue, tbCP.Text, cbPais.SelectedValue, tbCIF.Text, _
                                             tbTelf1.Text, tbTelf2.Text, tbFax.Text, tbMovil.Text, tbEmail.Text, _
                                             tbWeb.Text, tbCtaConta.Text, Now, chkBaja.Checked, DBNull.Value, Now, DBNull.Value, DBNull.Value)

    Si alguien me puede decir como pasar los valores nulos al procedimiento almacenado del entity framework, le estaría muy agradecido.

    Un Saludo.

    Juan Carlos


    sábado, 10 de noviembre de 2012 21:30

Respuestas

  • hola

    disculpa es una aplicacion vb.net no se usa Null, se deberia usar Nothing

    prueba poniendo nothing en estos parametros que permiten null


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta elturle lunes, 12 de noviembre de 2012 18:23
    lunes, 12 de noviembre de 2012 13:18

Todas las respuestas

  • no probaste en lugar de poner DbNull.Value de asignar simplemente null

    porque se supone que line convierte de un tipo de .net a un tipo de base de datos, asi que si asignas null deberia convertir a DbNull


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 11 de noviembre de 2012 6:01
  • Hola Leandro:

    Cuando lo sustituyo dbnull.value por null me marca el siguiente errror:

    Error 1 'null' no se declaró. Ya no se admite la constante 'Null' de la base de datos; utilice 'System.DBNull' en su lugar.

    Un Saludo.

    Juan Carlos

    domingo, 11 de noviembre de 2012 10:35
  • entiendo, bueno el mesnaje deja bien claro que debe usarse un DbNull

    pero cual ejecutas de esa forma que error obtienes ? has validado que los campos que deben llevar null asi lo permitan

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 11 de noviembre de 2012 12:16
  • Hola Leandro.

    Cuando los pongo dbnull.value me da los siguentes errores:

    Error 3 Un valor de tipo 'System.DBNull' no se puede convertir en 'Boolean?'.
    Error 1 Un valor de tipo 'System.DBNull' no se puede convertir en 'Date?'.
    Error 2 Un valor de tipo 'System.DBNull' no se puede convertir en 'Integer?'.

    Los campos que permiten valores nulos, los tengo en la base de datos sql marcado lo de permitir nulos y en vs2010 los tengo puestos:

    Acepta Valores Null: True.

    Un Saludo.

    Juan Carlos

    

    domingo, 11 de noviembre de 2012 14:34
  • mm que raro

    porque esto que mencionas es claramente lo que indicaba desde el metodo debias asignar un null para que luego EF convierta este a DbNull

    pero es algo que EF deberia realizar

    porque un Integer? es de .net por eso el tendrias que asignar null

    Nota: tienes habilitado el Option Strict en vb.net, para que valide al conversion de tipos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 11 de noviembre de 2012 22:02
  • Hola Leandro:

    He puesto Option Strict = on, por lo que han salido unos errores de conversión, los he corregido, pero me siguen saliendo el mismo error, si le pongo null, me da el siguiente error:

    Error 2 'null' no se declaró. Ya no se admite la constante 'Null' de la base de datos; utilice 'System.DBNull' en su lugar.
    Error 3 'null' no se declaró. Ya no se admite la constante 'Null' de la base de datos; utilice 'System.DBNull' en su lugar.
    Error 1 'Null' no se declaró. Ya no se admite la constante 'Null' de la base de datos; utilice 'System.DBNull' en su lugar.

    Y si lo reemplazo por dbnull.value, me da el siguiente error:

    Error 3 Un valor de tipo 'System.DBNull' no se puede convertir en 'Boolean?'
    Error 1 Un valor de tipo 'System.DBNull' no se puede convertir en 'Date?'
    Error 2 Un valor de tipo 'System.DBNull' no se puede convertir en 'Integer?'

    Por lo que no se porque no acepta el dbnull.value que sería lo correcto. 

    Un Saludo.

    Juan Carlos

    domingo, 11 de noviembre de 2012 23:01
  • hola

    disculpa es una aplicacion vb.net no se usa Null, se deberia usar Nothing

    prueba poniendo nothing en estos parametros que permiten null


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta elturle lunes, 12 de noviembre de 2012 18:23
    lunes, 12 de noviembre de 2012 13:18
  • Muchas Gracias Leandro:

    Funciona correctamente.

    Un Saludo.

    Juan Carlos

    lunes, 12 de noviembre de 2012 18:23
  • Muchas gracias por el aporte, sirvió de mucho :)
    martes, 28 de agosto de 2018 15:56