SQL Server - Insertar registro nulos

 
Vista:
sin imagen de perfil
Val: 170
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Insertar registro nulos

Publicado por Miguel (84 intervenciones) el 22/05/2019 18:00:26
Quería a ver si alguno me puede aclarar el problema que se me ha presentado, estoy trabajando con Sql Server. Les pongo el código donde tengo la pega.

'********************** Insertar Caja ***************************
Using CmdDetalle As New SqlCommand
CmdDetalle.CommandText = "INSERT INTO Caja VALUES(@IdCaja,@IdVenta,@IdCompra,@IdAviso,@IdSeguro,@IdCliente,@IdProveedor,@Operacion,@Fecha,@Importe,@Estado)"
CmdDetalle.CommandType = CommandType.Text
CmdDetalle.Connection = Conn
CmdDetalle.Transaction = T
CmdDetalle.Parameters.Add("@IdCaja", SqlDbType.Int).Value = eCaja.IdCaja
CmdDetalle.Parameters.Add("@IdVenta", SqlDbType.Int).Value = vbNullChar
CmdDetalle.Parameters.Add("@IdCompra", SqlDbType.Int).Value = nuevaCompra.IdCompra
CmdDetalle.Parameters.Add("@IdAviso", SqlDbType.Int).Value = vbNullChar
CmdDetalle.Parameters.Add("@IdSeguro", SqlDbType.Int).Value = vbNullChar
CmdDetalle.Parameters.Add("@IdCliente", SqlDbType.Int).Value = vbNullChar
CmdDetalle.Parameters.Add("@IdProveedor", SqlDbType.Int).Value = eCaja.IdProveedor
CmdDetalle.Parameters.Add("@Operacion", SqlDbType.VarChar).Value = eCaja.Operacion
CmdDetalle.Parameters.Add("@Fecha", SqlDbType.Date).Value = DateTime.Parse(nuevaCompra.Fecha).ToShortDateString()
CmdDetalle.Parameters.Add("@Importe", SqlDbType.Decimal).Value = eCaja.Importe
CmdDetalle.Parameters.Add("@Estado", SqlDbType.VarChar).Value = eCaja.Estado
Dim correcto As Integer = CmdDetalle.ExecuteNonQuery
If correcto = 0 Then
T.Rollback()
Throw New Exception("Se produjo un error al grabar el Factura")
End If
End Using

Quiero insertar registros en una tabla "Caja" pero hay una serie de campos que solo tienen valor cuando se trabaja con el formulario correspondiente.
Por ejemplo cuando hago una Compra de un Proveedor tiene valor los siguiente campos:
IdCaja, IdCompra, IdProveedor, Operacion, Fecha, Importe y Estado El resto tienen que ser nulos
Pero los ponga igual a cero ó Null siempre me da error.
Los otros casos pueden ser :
IdCaja, IdVenta, IdCliente, Operacion, Fecha, Importe y Estado
IdCaja, IdVenta, IdAviso, IdCliente, Operacion, Fecha, Importe y Estado
IdCaja, IdVenta, IdSeguro, IdCliente, Operacion, Fecha Importe y Estado

De tal forma que cada vez que Inserto un registro siempre hay algún valor nulo. He probado con vbNullChar y da error, he probado poniendo cero y da error, pero no encuentro otras opciones.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 14
Ha disminuido su posición en 5 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Insertar registro nulos

Publicado por Yamil Bracho (39 intervenciones) el 22/05/2019 18:10:47
Primero chequea como esta definido el campo en la tabla, es decir, si acepta nulos o no.
Lo otro es que vez de vbNullChar coloques DBNull.Value
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 170
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Insertar registro nulos

Publicado por Miguel (84 intervenciones) el 22/05/2019 20:52:26
en Sql Server tiene que poner un tic en Null para que el campo pueda admitirlos. Eso es básico y no te lo puedes dejar sin marcar.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 170
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Insertar registro nulos

Publicado por Miguel (84 intervenciones) el 22/05/2019 22:22:32
He cambiado el vbNullChar por SqlTypes.SqlInt32.Null y el error que da dice: Los datos de la cadena o binarios se truncarían. Se termino la instrucción.

Me puede alguien decir el fallo que tengo.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar