none
tipo de datos system.DateTime RRS feed

  • Pregunta

  • Hola:

    Tengo un procedimiento  donde relleno un array y lo pongo como fuente de un gridview

        Sub rellenar_ficheros(Optional orden As String = "fecha", Optional direccion As String = "asc")
            Dim cnconexion As New SqlConnection(ConfigurationManager.ConnectionStrings("Cresolia").ConnectionString)
            Dim sqlc As New SqlCommand("seleccionar_datos_premios", cnconexion)
            Dim strfichero As String, dt As New DataTable, dr As DataRow, fi As FileInfo, blnimprimir As Boolean = Request.QueryString("imprimir") IsNot Nothing
            Dim strfoundfile As String, dectamano As Decimal, strtamano As String, sqlr As SqlDataReader, dv As DataView
            sqlc.CommandType = CommandType.StoredProcedure
            sqlc.Parameters.Add("@fichero", SqlDbType.NVarChar, 25)
            dt.Columns.Add("id0", System.Type.GetType("System.Int16"))
            dt.Columns.Add("fecha", System.Type.GetType("System.DateTime"))
            dt.Columns.Add("titulo", System.Type.GetType("System.String"))
            dt.Columns.Add("foto", System.Type.GetType("System.String"))
            dt.Columns.Add("enlace", System.Type.GetType("System.String"))
            dt.Columns.Add("comentario", System.Type.GetType("System.String"))
            dt.Columns.Add("tamano", System.Type.GetType("System.String"))
            For Each strfoundfile In My.Computer.FileSystem.GetFiles(Server.MapPath("../Premios/"), Microsoft.VisualBasic.FileIO.SearchOption.SearchTopLevelOnly, "*.*")
                strtamano = " kb."
                fi = New FileInfo(strfoundfile)
                If (File.GetAttributes(fi.FullName) And FileAttributes.Hidden) <> FileAttributes.Hidden Then
                    strfichero = fi.Name
                    sqlc.Parameters("@fichero").Value = strfichero
                    cnconexion.Open()
                    sqlr = sqlc.ExecuteReader
                    sqlr.Read()
                    dr = dt.NewRow()
                    If sqlr.HasRows Then
                        dr("fecha") = sqlr("fecha")
                        dr("titulo") = sqlr("titulo")
                        dr("enlace") = sqlr("enlace")
                        dr("comentario") = sqlr("comentario")
                        dr("foto") = fi.Name
                        dr("id0") = sqlr("id0")
                        dectamano = fi.Length / 1024
                        If dectamano >= 1000 Then
                            dectamano /= 1000
                            strtamano = " mb."
                        End If
                        dr("tamano") = Format(dectamano, "n2") & strtamano
                    Else
                        dr("fecha") = "--"
                        dr("titulo") = "--"
                        dr("enlace") = "--"
                        dr("comentario") = "--"
                        dr("foto") = "Sobra " & fi.Name
                        dr("id0") = 0
                        dectamano = fi.Length / 1024
                        If dectamano >= 1000 Then
                            dectamano /= 1000
                            strtamano = " mb."
                        End If
                        dr("tamano") = Format(dectamano, "n2") & strtamano
                    End If
                    dt.Rows.Add(dr)
                    sqlr.Close()
                    cnconexion.Close()
                End If
            Next
            sqlc.Parameters.Clear()
            sqlc.Parameters.AddWithValue("@verficheros", True)
            cnconexion.Open()
            sqlr = sqlc.ExecuteReader
            Do While sqlr.Read
                fi = Nothing
                strfichero = Trim(sqlr("foto"))
                If strfichero <> "" Then
                    fi = New FileInfo(Server.MapPath("../Premios/") & strfichero)
                    If Not fi.Exists Then
                        dr = dt.NewRow()
                        dr("id0") = sqlr("id0")
                        dr("fecha") = sqlr("fecha")
                        dr("titulo") = sqlr("titulo")
                        dr("enlace") = sqlr("enlace")
                        dr("comentario") = sqlr("comentario")
                        dr("foto") = "Falta " & strfichero
                        dr("tamano") = "0 kb."
                        dt.Rows.Add(dr)
                    End If
                End If
            Loop
            sqlr.Close()
            cnconexion.Close()
            dv = New DataView(dt)
            dv.Sort = orden & " " & direccion
            gvpremios.DataSource = dv
            Session("ficherospremios") = dv
            If Not blnimprimir Then gvpremios.PageSize = registrospagina()
            gvpremios.DataBind()
        End Sub
    

    En un momento dado quiero filtrar por fecha. El filtro es

    fecha < convert(smalldatetime,'2015-8-12 0:00:00.000',121)

    Para filtrar hago

    dv.RowFilter = strcondicion

    strcondicion es el filtro

    Y me sale error en la sentencia del rowfilter

    Número no válido de argumentos: función convert().

    ¿Qué puede ser? Tal vez sea el tipo que declaro en la fecha. No sé

    Gracias de antemano


    miércoles, 12 de agosto de 2015 8:51

Respuestas

  • hola

    pero porque filtras usando la propiedad RowFilter ? porque no envias el parametro directo al procedure para filtrar desde la query sql y que sea la db quien se encargue

    ademas no creo que puedas usar una funcion del sql server en un dataview, porque es una funciona del motor de base de datos

    -----

    ademas cual es el sentido de usar un reader y volcar los datos a un datatable? porque no defines una clase y un List<>

    de esta forma podrias usar linq para filtrar los datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 12 de agosto de 2015 11:55

Todas las respuestas

  • Hola de nuevo:

    He hecho ejemplos y sólo me falla cuando el campo es fecha, por lo que deduzco que el tipo lo debo tener mal.

    ¿Cuál poner?

    Gracias de antemano

    miércoles, 12 de agosto de 2015 11:46
  • hola

    pero porque filtras usando la propiedad RowFilter ? porque no envias el parametro directo al procedure para filtrar desde la query sql y que sea la db quien se encargue

    ademas no creo que puedas usar una funcion del sql server en un dataview, porque es una funciona del motor de base de datos

    -----

    ademas cual es el sentido de usar un reader y volcar los datos a un datatable? porque no defines una clase y un List<>

    de esta forma podrias usar linq para filtrar los datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 12 de agosto de 2015 11:55