No me detecta los errores en el try

Iniciado por nolasco281, 12 Mayo 2015, 20:15 PM

0 Miembros y 1 Visitante están viendo este tema.

nolasco281

Hola como están.

Mi consulta es la siguiente

Cuando envió datos a la BD no me detecta los errores el try explico cuando no tiene código de pedido ni de proveedor si me marca los errores como la llave de ese valor ya existe  o que no estoy mandando la llave primaria eso es con los valores int.

Ahora cuando no ingreso por ejemplo la dirección debería marcarme que el campo no puede quedar nulo porque así lo declare en la BD pero no me aparece la excepción es decir lo manda vacío.

Aca una imagen  Donde los campos como direccion telefono ... deberia de capturarme una excepcion por que los declare como not null pero no se que pasa. Como pueden ver en el registro 1 y 2


De esta forma mando los datos a la BD
Código (vbnet) [Seleccionar]
Dim con = New SqlConnection(conexion)
       Try
con.Open()

           Dim comando1 As New SqlCommand("Insert into Pedido(codigoDelPedido, codigoProveedor, direccionDeEntrega," & _
                                          "telefono, tipoDePedido, prioridad, formaDePago, fechaDelPedido, horaDelPediddo," & _
                                          "fechaDeEntrega, horaDeEntrega, total, observaciones)" & _
                                          "values (@codigoDelPedido, @codigoProveedor, @direccionDeEntrega," & _
                                          "@telefono, @tipoDePedido, @prioridad, @formaDePago, @fechaDelPedido, @horaDelPediddo," & _
                                          "@fechaDeEntrega, @horaDeEntrega, @total, @observaciones)", con)

           'Datos de la tabla proveedores
           comando1.Parameters.Add("@codigoDelPedido", SqlDbType.Int).Value = txtCodPedido.Text
           comando1.Parameters.Add("@codigoProveedor", SqlDbType.Int).Value = txtCodProv.Text
           comando1.Parameters.Add("@direccionDeEntrega", SqlDbType.VarChar, 100).Value = txtDircPed.Text
           comando1.Parameters.Add("@telefono", SqlDbType.VarChar, 11).Value = mskTelPed.Text
           comando1.Parameters.Add("@tipoDePedido", SqlDbType.VarChar, 15).Value = cmbTipoPedi.Text
           comando1.Parameters.Add("@prioridad", SqlDbType.VarChar, 15).Value = cmbPrioriPedi.Text
           comando1.Parameters.Add("@formaDePago", SqlDbType.VarChar, 20).Value = cmbFormPagoPedi.Text
           comando1.Parameters.Add("@fechaDelPedido", SqlDbType.Date).Value = dtpFechaPedido.Value
           comando1.Parameters.Add("@horaDelPediddo", SqlDbType.DateTime).Value = tpHoraPedido.Value
           comando1.Parameters.Add("@fechaDeEntrega", SqlDbType.Date).Value = dtpFechaEntregaPedido.Value
           comando1.Parameters.Add("@horaDeEntrega", SqlDbType.DateTime).Value = tpHoraPedido.Value
           comando1.Parameters.Add("@total", SqlDbType.Decimal).Value = txtTotalPedido.Text
           comando1.Parameters.Add("@observaciones", SqlDbType.VarChar, 100).Value = txtObservacionesPedidos.Text
'Ejecuta la instruccion comando1
           comando1.ExecuteNonQuery()
           'Cierra la conexion
           con.Close()

           'Mensaje datos guardados con exito
           RadMessageBox.Show(Me, "Los datos se registraron correctamente", "Mensaje",
                                  MessageBoxButtons.OK, RadMessageIcon.Info)

       Catch ex As Exception : RadMessageBox.Show(ex.Message) 'captura el error original del sistema
           'RadMessageBox.Show("Verifique sus datos o que el codigo no exista")
       End Try


Esta es mi tabla en la BD
Código (sql) [Seleccionar]
Create table Pedido
(
codigoDelPedido int primary key,
codigoProveedor int not null,
direccionDeEntrega varchar (100) not null,
telefono varchar (11) not null,
tipoDePedido varchar (15) not null,
prioridad varchar(15) not null,
formaDePago varchar(20) not null,
fechaDelPedido date not null,
horaDelPediddo time not null,
fechaDeEntrega date not null,
horaDeEntrega time,
total decimal (7,2) not null,
observaciones varchar(100)
)


Espero puedan ayudarme saludos.
Lo que se puede imaginar... se puede programar.

kub0x

Buenas,

que el campo de texto asociado a codigoProveedor esté vacío no quiere decir que la propiedad .Text sea null, realmente es un string vacío pero instanciado, por lo tanto es un objeto válido que participa el la inserción. Prueba a insertar poniendo null o Nothing en tu caso en codigoProveedor en vez del campo de texto, debería de lanzar la excepción y reafirmar mi hipótesis.

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


nolasco281

#2
Hola gracias por contestar

Modifique la linea y me lanza el siquiente error
Código (vbnet) [Seleccionar]
comando1.Parameters.Add("@codigoProveedor", SqlDbType.Int).Value = Nothing



Error con si el campo esta vacio
Código (vbnet) [Seleccionar]
comando1.Parameters.Add("@codigoProveedor", SqlDbType.Int).Value = txtCodProv.Text


Error si ya esta la llave primaria


pero como hago con los campos como telefono o direccion para que me capture la excepcion del not null de la BD es parte es la que no logro comprender.
Lo que se puede imaginar... se puede programar.

kub0x

Cita de: nolasco281 en 12 Mayo 2015, 21:11 PM
Hola gracias por contestar

Modifique la linea y me lanza el siquiente error
Código (vbnet) [Seleccionar]
comando1.Parameters.Add("@codigoProveedor", SqlDbType.Int).Value = Nothing



pero como hago con los campos como telefono o direccion para que me capture la excepcion del not null.

Estaba en lo cierto :) Todos los campos esperan un valor distinto de null. Ten en cuenta que un string vacío no se considera null como ya dije, pues la instancia del objeto está creada. Realmente no te diste cuenta.

Para solucionar esto debes de comprobar que los datos a insertar contienen información, es decir, comprobar que los strings tienen longitud mayor que 0 y derivados.

0 no es null, String("") o String.Empty no es null... ten eso claro.

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


nolasco281

#4
Creo que entendi.

Ya me salio.

Efectivamente me captura el error pero debo de hacer esto por cada uno? esa es mi ultima duda.

Código (vbnet) [Seleccionar]
If txtDircPed.Text.Length > 0 Then
   comando1.Parameters.Add("@direccionDeEntrega", SqlDbType.VarChar, 100).Value = txtDircPed.Text
 End If

If mskTelPed.Text = "____-__-__" Then
Else
  comando1.Parameters.Add("@telefono", SqlDbType.VarChar, 11).Value = mskTelPed.Text
End If






Se me olvidaba muchas gracias kub0x
Lo que se puede imaginar... se puede programar.

kub0x

Cita de: nolasco281 en 12 Mayo 2015, 21:58 PM
Creo que entendi.
Ya me salio.
Efectivamente me captura el error pero debo de hacer esto por cada uno? esa es mi ultima duda.

Buenas. Me alegro de que haya quedado claro :) Sí, debes comprobar las entradas antes de insertar. Si algún campo queda vacío saltará la excepción del Try pues no deberías de asignar algo vacío a la variable a insertas. Vamos que ahora vas en el buen camino.

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate