Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: nolasco281 en 12 Mayo 2015, 20:15 pm



Título: No me detecta los errores en el try
Publicado por: nolasco281 en 12 Mayo 2015, 20:15 pm
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
(http://1.bp.blogspot.com/-ndxyQN6CFlY/VVJCPnWRdJI/AAAAAAAAA34/nx2QVfqrvDA/s1600/ErrorBD.png)
 
De esta forma mando los datos a la BD
Código
  1. Dim con = New SqlConnection(conexion)
  2.        Try
  3. con.Open()
  4.  
  5.            Dim comando1 As New SqlCommand("Insert into Pedido(codigoDelPedido, codigoProveedor, direccionDeEntrega," & _
  6.                                           "telefono, tipoDePedido, prioridad, formaDePago, fechaDelPedido, horaDelPediddo," & _
  7.                                           "fechaDeEntrega, horaDeEntrega, total, observaciones)" & _
  8.                                           "values (@codigoDelPedido, @codigoProveedor, @direccionDeEntrega," & _
  9.                                           "@telefono, @tipoDePedido, @prioridad, @formaDePago, @fechaDelPedido, @horaDelPediddo," & _
  10.                                           "@fechaDeEntrega, @horaDeEntrega, @total, @observaciones)", con)
  11.  
  12.            'Datos de la tabla proveedores
  13.            comando1.Parameters.Add("@codigoDelPedido", SqlDbType.Int).Value = txtCodPedido.Text
  14.            comando1.Parameters.Add("@codigoProveedor", SqlDbType.Int).Value = txtCodProv.Text
  15.            comando1.Parameters.Add("@direccionDeEntrega", SqlDbType.VarChar, 100).Value = txtDircPed.Text
  16.            comando1.Parameters.Add("@telefono", SqlDbType.VarChar, 11).Value = mskTelPed.Text
  17.            comando1.Parameters.Add("@tipoDePedido", SqlDbType.VarChar, 15).Value = cmbTipoPedi.Text
  18.            comando1.Parameters.Add("@prioridad", SqlDbType.VarChar, 15).Value = cmbPrioriPedi.Text
  19.            comando1.Parameters.Add("@formaDePago", SqlDbType.VarChar, 20).Value = cmbFormPagoPedi.Text
  20.            comando1.Parameters.Add("@fechaDelPedido", SqlDbType.Date).Value = dtpFechaPedido.Value
  21.            comando1.Parameters.Add("@horaDelPediddo", SqlDbType.DateTime).Value = tpHoraPedido.Value
  22.            comando1.Parameters.Add("@fechaDeEntrega", SqlDbType.Date).Value = dtpFechaEntregaPedido.Value
  23.            comando1.Parameters.Add("@horaDeEntrega", SqlDbType.DateTime).Value = tpHoraPedido.Value
  24.            comando1.Parameters.Add("@total", SqlDbType.Decimal).Value = txtTotalPedido.Text
  25.            comando1.Parameters.Add("@observaciones", SqlDbType.VarChar, 100).Value = txtObservacionesPedidos.Text
  26. 'Ejecuta la instruccion comando1
  27.            comando1.ExecuteNonQuery()
  28.            'Cierra la conexion
  29.            con.Close()
  30.  
  31.            'Mensaje datos guardados con exito
  32.            RadMessageBox.Show(Me, "Los datos se registraron correctamente", "Mensaje",
  33.                                   MessageBoxButtons.OK, RadMessageIcon.Info)
  34.  
  35.        Catch ex As Exception : RadMessageBox.Show(ex.Message) 'captura el error original del sistema
  36.            'RadMessageBox.Show("Verifique sus datos o que el codigo no exista")
  37.        End Try

Esta es mi tabla en la BD
Código
  1. CREATE TABLE Pedido
  2. (
  3. codigoDelPedido INT PRIMARY KEY,
  4. codigoProveedor INT NOT NULL,
  5. direccionDeEntrega VARCHAR (100) NOT NULL,
  6. telefono VARCHAR (11) NOT NULL,
  7. tipoDePedido VARCHAR (15) NOT NULL,
  8. prioridad VARCHAR(15) NOT NULL,
  9. formaDePago VARCHAR(20) NOT NULL,
  10. fechaDelPedido DATE NOT NULL,
  11. horaDelPediddo TIME NOT NULL,
  12. fechaDeEntrega DATE NOT NULL,
  13. horaDeEntrega TIME,
  14. total DECIMAL (7,2) NOT NULL,
  15. observaciones VARCHAR(100)
  16. )
  17.  

Espero puedan ayudarme saludos.


Título: Re: No me detecta los errores en el try
Publicado por: kub0x en 12 Mayo 2015, 20:50 pm
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.


Título: Re: No me detecta los errores en el try
Publicado por: nolasco281 en 12 Mayo 2015, 21:11 pm
Hola gracias por contestar

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

(http://4.bp.blogspot.com/-65v83EzwHNU/VVJPSLIXPTI/AAAAAAAAA4I/6X6vNkTDpac/s1600/Error.png)

Error con si el campo esta vacio
Código
  1. comando1.Parameters.Add("@codigoProveedor", SqlDbType.Int).Value = txtCodProv.Text
(http://2.bp.blogspot.com/-3q9BKteFddc/VVJS-WXehNI/AAAAAAAAA4Q/tsHsPIJJIVc/s1600/Error1.png)

Error si ya esta la llave primaria
(http://2.bp.blogspot.com/-XhMpshBOKAU/VVJTf08UViI/AAAAAAAAA4Y/z3Ow7pQ3JMQ/s1600/Error2.png)

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.


Título: Re: No me detecta los errores en el try
Publicado por: kub0x en 12 Mayo 2015, 21:22 pm
Hola gracias por contestar

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

(http://4.bp.blogspot.com/-65v83EzwHNU/VVJPSLIXPTI/AAAAAAAAA4I/6X6vNkTDpac/s1600/Error.png)

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.


Título: Re: No me detecta los errores en el try
Publicado por: 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.

Código
  1. If txtDircPed.Text.Length > 0 Then
  2.    comando1.Parameters.Add("@direccionDeEntrega", SqlDbType.VarChar, 100).Value = txtDircPed.Text
  3.  End If
  4.  
  5. If mskTelPed.Text = "____-__-__" Then
  6. Else
  7.   comando1.Parameters.Add("@telefono", SqlDbType.VarChar, 11).Value = mskTelPed.Text
  8. End If




Se me olvidaba muchas gracias kub0x


Título: Re: No me detecta los errores en el try
Publicado por: kub0x en 12 Mayo 2015, 22:00 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.