none
Realizar búsqueda que contiene campos SMALLDATETIME de SQL 2005 en Visual Studio 2015 RRS feed

  • Pregunta

  • Hola! estoy realizando un select en una base de datos que contiene datos de tipo SMALLDATETIME, he tenido problemas, porque justamente es ese el campo al que le tengo que realizar la búsqueda, me arroja el error "No se puede convertir una cadena de caracteres en smalldatetime"

    La consulta en cuestión es la siguiente:

    If chkGState.EditValue = "" Then MsgBox("1" & vbNewLine & fechaFin & " " & FechaIni)

    'FechaIni y FechaFin son de tipo Date RS_ART = CN.Execute("SELECT TOP(" & txtElementos.Text & ") ord_id,ord_ide,pro_nom_fis,ORD_fec,ord_fec_rec,ORD_tot,ORD_est,ord_cli,ord_pri,ord_porPago " & "FROM ORDENES_COMPRA AS OC,PROVEEDORES AS P WHERE OC.pro_id=P.pro_id AND ORD_est<>'CANCELADO' AND ORD_fec BETWEEN CONVERT(SMALLDATETIME,'" & Format(FechaIni, "dd/MM/yyyy") & "') AND CONVERT(SMALLDATETIME,'" & Format(fechaFin, "dd/MM/yyyy") & "') AND alm_id=1 AND per_id=" & perId) Else MsgBox("2" & vbNewLine & fechaFin & " " & FechaIni) RS_ART = CN.Execute("SELECT TOP(" & txtElementos.Text & ") ord_id,ord_ide,pro_nom_fis,ORD_fec,ord_fec_rec,ORD_tot,ORD_est,ord_cli,ord_pri,ord_porPago " & "FROM ORDENES_COMPRA " & "AS OC,PROVEEDORES AS P WHERE OC.pro_id=P.pro_id AND ORD_est='" & chkGState.EditValue & "' AND ORD_fec BETWEEN CONVERT(SMALLDATETIME,'" & Format(FechaIni, "dd/MM/yyyy") & "') AND CONVERT(SMALLDATETIME,'" & Format(fechaFin, "dd/MM/yyyy") & "') AND alm_id=1 AND per_id=" & perId) End If GridC1.DataSource = RS_ART

    realizo esa conversión en una inserción que si funciona y no arroja ningún error:

    RS_TRA = CN.Execute("INSERT INTO USUARIOS_TRANSACCIONES(tra_for,tra_fec,tra_tip,usu_id,tra_com,tra_ip,tra_id_afe,alm_id,tra_hor)" &
                                    "VALUES('" & trafor & "',CONVERT(SMALLDATETIME, '" & Format(Date.Now, "dd/MM/yyyy") & "'),'" & tratip & "'," & usuid & ",'" & tracom & "','" & traip & "'," & traidafe &
                                    "," & almid & ",CONVERT(SMALLDATETIME, '" & Format(TimeOfDay, " hh:mm") & "'))")

    • Cambiado Enrique M. Montejo domingo, 22 de octubre de 2017 6:23 Pregunta relacionada con el acceso a datos.
    jueves, 19 de octubre de 2017 22:46

Respuestas

  • Si estamos hablando de un servidor SQL Server, el formato que requiere es mes-dia-año en lugar de dia-mes-año. También puedes usar "yyyyMMdd". Si te funciona con el Insert ha debido ser por casualidad, seguramente porque tenías una fecha con el día menor o igual que 12 y por eso "colaba" a pesar de estar al revés.

    Recomendación: Parametriza la sentencia y pásale el DateTime directo al parámetro, sin convertir a string y por lo tanto sin formato (en lugar de concatenarlo en el texto de la sentencia). Al usar parámetros, ya se encarga el driver de hacer internamente las conversiones oportunas al formato correcto.

    viernes, 20 de octubre de 2017 7:04