Foros del Web » Programación para mayores de 30 ;) » .NET »

Error al Grabar Fechas

Estas en el tema de Error al Grabar Fechas en el foro de .NET en Foros del Web. esto trabajando con vb 2010 tengo el sig. codigo en una aplicacion, y al grabar en un campo fecha me arroja un error. Dim sql ...
  #1 (permalink)  
Antiguo 22/08/2011, 14:10
Avatar de websistems  
Fecha de Ingreso: octubre-2010
Mensajes: 69
Antigüedad: 13 años, 6 meses
Puntos: 0
Error al Grabar Fechas

esto trabajando con vb 2010 tengo el sig. codigo en una aplicacion, y al grabar en un campo fecha me arroja un error.

Dim sql As String = "insert into personal (pers_cod,pers_apel,pers_nom,pers_di,pers_fn) values ('" & Me.TextBox1.Text & "','" & Me.TextBox2.Text & "','" & Me.TextBox3.Text & "','" & Me.TextBox4.Text & "'," & CDate(Me.MaskedTextBox1.Text) & ""

Dim cmd As New SqlCommand(sql, cn)

cn.Open()

cmd.ExecuteNonQuery()
cn.Close()

pongo por ejemplo en el masked box 10/10/1995

me arroja este error: sintaxis incorrecta cerca de 1995.

Que puede estar ocurriendo?
  #2 (permalink)  
Antiguo 22/08/2011, 14:46
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Error al Grabar Fechas

Hola websystems te falta agregar las ' ' entre la fecha y cerrar al final con el ")". Nos cuentas. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #3 (permalink)  
Antiguo 22/08/2011, 14:57
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: Error al Grabar Fechas

No te aconsejo que hagas este tipo de insert para la informacion que contiene fechas.

Y menos hacer la conversion directa porque el formato que entrega el CDATE podria no corresponder con el formato que espera el motor de bases de datos.

Que te recomiendo...

Trabajar con SqlParameters

aldo mas o menos asi: (no lo he probado porque no tengo en este momento una maquina de desarrollo, asi que debes verificar la sintaxis)

1. Armas el query

Código:
Dim sql As String = "insert into personal (pers_cod,pers_apel,pers_nom,pers_di,pers_fn) values (@codigo,@apellidos,@nombres,@direccion,@fecha) "
2. Armas el command

Código:
Dim cmd As New SqlCommand(sql, cn)
3. Crear los parametros Informaicion
Código:
SqlParameter pCodigo = New SqlParameter  (revisa las sobrecargas)
pCodigo.Value = txtCodigo.Text

SqlParameter pNombre= New SqlParameter  (revisa las sobrecargas)
pNombre.Value = txtNombre.Text
Y asi sucesivamente con todos los campos, entre las sobre cargas de los parametros esta el tipo de dato: SqlDbType.VarChar, SqlDbType.Interger, SqlDbType.DateTime es muy importante que el tipo corresponda a lo que deseas guardar asi la conversion no te va a fallar para las fechas.

3. Agregar al cmd los parametros en el mismo orden que los vas a usar en la sentencia INSERT
Código:
cmd.Parameters.Add(pCodigo)
cmd.Parameters.Add(pNombre)
Y asi con cada uno

Una vez tengas esto listo lo ejecutas
Código:
cn.Open()

cmd.ExecuteNonQuery()
cn.Close()
Recuerda usar el Try... Cacth para controlar los errores.

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #4 (permalink)  
Antiguo 22/08/2011, 15:12
Avatar de websistems  
Fecha de Ingreso: octubre-2010
Mensajes: 69
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Error al Grabar Fechas

Ya lo consegui era un erro de sistaxis, y ano me arroja error pero no me graba correctamente la fecha en el masquedbox tengo este formato ##/##/#### (Dia, mes, año) en mi bd (sql 2008) se graba asi:

1900-01-01 00:00:00

como puedo hacer para que se grabe correctamente.
  #5 (permalink)  
Antiguo 22/08/2011, 15:34
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: Error al Grabar Fechas

Revisa el post que te escribi sobre el manejo de parametros.

Realiza un paso a paso a ver que valor de fecha te esta entregado el MaskedBox

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #6 (permalink)  
Antiguo 22/08/2011, 16:19
Avatar de websistems  
Fecha de Ingreso: octubre-2010
Mensajes: 69
Antigüedad: 13 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Error al Grabar Fechas

pero en tu post en que parte le pones a los parametros el tipo de dato que es?
  #7 (permalink)  
Antiguo 22/08/2011, 17:13
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: Error al Grabar Fechas

Donde dice, "Revisa las sobrecargas"

En la noche cuando este en casa busco un ejemplo que tengo y te lo posteo.

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #8 (permalink)  
Antiguo 22/08/2011, 17:19
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: Error al Grabar Fechas

Listo, lo encontre, este es un desarrollo que hice para MySQL pero es totalmente funcional tambien con SQLServer y sirve para ilustrarte lo que debes hacer con tu Insert.

Código C#:
Ver original
  1. public int InsertNewOwner(string id_owner, string cod_owner, string name,
  2.             string telephone, string cellphone, string address, string mail)
  3.         {
  4.             int result = 0;
  5.             MySqlConnection cn = new MySqlConnection(Common.ConnectionString);
  6.  
  7.             using (cn)
  8.             {
  9.                 try
  10.                 {
  11.                     cn.Open();
  12.                     MySqlParameter pIdOwner = new MySqlParameter("@ID_OWNER", MySqlDbType.String, 40) { Value = id_owner };
  13.                     MySqlParameter pCodeOwner = new MySqlParameter("@COD_OWNER", MySqlDbType.String, 20) { Value = cod_owner };
  14.                     MySqlParameter pName = new MySqlParameter("@NAME", MySqlDbType.String, 80) { Value = name };
  15.                     MySqlParameter pTelephone = new MySqlParameter("@TELEPHONE", MySqlDbType.String, 45) { Value = telephone };
  16.                     MySqlParameter pCellPhone = new MySqlParameter("@CELLPHONE", MySqlDbType.String, 45) { Value = cellphone };
  17.                     MySqlParameter pAddress = new MySqlParameter("@ADDRESS", MySqlDbType.String, 80) { Value = address };
  18.                     MySqlParameter pMail = new MySqlParameter("@MAIL", MySqlDbType.String, 80) { Value = mail };
  19.  
  20.                     query = "INSERT INTO tblowners " +
  21.                         "(ID_OWNER, " +
  22.                         "COD_OWNER, " +
  23.                         "NAME, " +
  24.                         "TELEPHONE, " +
  25.                         "CELLPHONE, " +
  26.                         "ADDRESS, " +
  27.                         "MAIL) " +
  28.                         "VALUES " +
  29.                         "( " +
  30.                         "@ID_OWNER, " +
  31.                         "@COD_OWNER, " +
  32.                         "@NAME, " +
  33.                         "@TELEPHONE, " +
  34.                         "@CELLPHONE, " +
  35.                         "@ADDRESS, " +
  36.                         "@MAIL " +
  37.                         ") ";
  38.  
  39.                     MySqlCommand cmd = new MySqlCommand(query, cn);
  40.                     cmd.Parameters.Add(pIdOwner);
  41.                     cmd.Parameters.Add(pCodeOwner);
  42.                     cmd.Parameters.Add(pName);
  43.                     cmd.Parameters.Add(pTelephone);
  44.                     cmd.Parameters.Add(pCellPhone);
  45.                     cmd.Parameters.Add(pAddress);
  46.                     cmd.Parameters.Add(pMail);
  47.  
  48.                     result = cmd.ExecuteNonQuery();
  49.  
  50.                 }
  51.                 catch (Exception ex)
  52.                 {
  53.  
  54.                 }
  55.                 finally
  56.                 {
  57.                     cn.Close();
  58.                 }
  59.             }
  60.  
  61.             return result;
  62.         }
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #9 (permalink)  
Antiguo 23/08/2011, 13:46
Avatar de rikakashi  
Fecha de Ingreso: julio-2011
Mensajes: 226
Antigüedad: 12 años, 9 meses
Puntos: 33
Respuesta: Error al Grabar Fechas

Cita:
Iniciado por websistems Ver Mensaje
Ya lo consegui era un erro de sistaxis, y ano me arroja error pero no me graba correctamente la fecha en el masquedbox tengo este formato ##/##/#### (Dia, mes, año) en mi bd (sql 2008) se graba asi:

1900-01-01 00:00:00

como puedo hacer para que se grabe correctamente.
verifica en tu base de datos el tipo de dato, posiblemente lo tengas como datetime y este te guardara la fecha y hora pero si solo quieres la fecha utiliza el smalldatetime
__________________
la programación es tan grande como la imaginación (+.+)
  #10 (permalink)  
Antiguo 24/08/2011, 11:07
Avatar de websistems  
Fecha de Ingreso: octubre-2010
Mensajes: 69
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Error al Grabar Fechas

muchas gracias a todos me resulto la grabacion del registro, solo tengo un problema la fecha de nacimiento lo grabo de un control maskedbox, con este formato 99/99/9999, cuando le pongo fecha me graba perdecto pero cuando ese campo lo deja en blanco me arroja un error:

cmd.ExecuteNonQuery()

-Error al convertir el valor del parametro de string a datetime

yo le asigno el valor del masked box como parametro de esta forma

With cmd.Parameters
.Add("@codigo", SqlDbType.Char).Value = Me.TextBox1.Text
.Add("@apellido", SqlDbType.VarChar).Value = Me.TextBox2.Text
.Add("@nombre", SqlDbType.VarChar).Value = Me.TextBox3.Text
.Add("@fecnac", SqlDbType.Date).Value = Me.MaskedTextBox1.Text
end with

ojo cuando le pongo la fecha me graba muy bien, pero cuando dejo en blanco este campo es que me arroja error, me podrian ayudar por favor?
  #11 (permalink)  
Antiguo 24/08/2011, 11:10
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: Error al Grabar Fechas

Intenta validar algo como esto:

Si MaskedFecha.Value Diferente de Vacio
le asignas el valor
else
.Add("@fecnac", SqlDbType.Date).Value = DbNull.Value

Proba y me comentas.
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #12 (permalink)  
Antiguo 24/08/2011, 11:12
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Error al Grabar Fechas

podrias tambien validarlo por la longitud(length) de caracteres que tiene tu mascara y mostrar un mensaje. Saludos.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #13 (permalink)  
Antiguo 24/08/2011, 11:47
Avatar de websistems  
Fecha de Ingreso: octubre-2010
Mensajes: 69
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Error al Grabar Fechas

Gracias por sus ideas lo resolvi asi, si tiene vacio(solo el formato) le paso una fecha por defecto en este caso "01/01/1900"

If Me.MaskedTextBox1.Text = " / /" Then
.Add("@fecnac", SqlDbType.Date).Value = "01/01/1900"

Else
.Add("@fecnac", SqlDbType.Date).Value = Me.MaskedTextBox1.Text

End If

gracias a todos

Etiquetas: fechas, net
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 03:46.