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

Problema con dataset

Estas en el tema de Problema con dataset en el foro de .NET en Foros del Web. Hola, estoy intentando hacer un calendario en el cual 1º desactivo todos los días (esto lo hace bien) para luego marcar los días festivos (los ...
  #1 (permalink)  
Antiguo 05/08/2011, 01:48
 
Fecha de Ingreso: mayo-2011
Mensajes: 60
Antigüedad: 13 años
Puntos: 1
Problema con dataset

Hola, estoy intentando hacer un calendario en el cual 1º desactivo todos los días (esto lo hace bien) para luego marcar los días festivos (los obtengo de mi BD) y otros días de otra tabla de mi BD (estos deben estar activos). El problema que tengo es que obtengo este error: System.IndexOutOfRangeException: No se puede encontrar la tabla 0. en esta línea de código: For Each dr As DataRow In dsNoMoved.Tables(0).Rows
* Lo 1º que he hecho es comprobar que las variables de la query tengan valor, reciben el valor correcto.
* Lo 2º ha sido comprobar que la query funciona fuera de código. Funciona y además he provado con los mismo valores que recibiría. Me devuelve valores correctos.
Lo raro de lo que me sucede es que los días festivos me los marca bien pero los otros no, sin embargo estoy utilizando el mismo proceso.
He revisado el código muchas veces y no consigo encontrar el error.
Código:
    '******************************************************************************************
    '*************************************** CALENDARIO ***************************************
    '******************************************************************************************

    Private dsHolidays As DataSet
    Private dsNoMoved As DataSet

    Protected Sub activarcalendario(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnusuariocalendario.Click

        MyCalendar.VisibleDate = Date.Today
        FillHolidayDataset()

    End Sub

    Protected Sub FillHolidayDataset()
        Dim firstDate As New DateTime(MyCalendar.VisibleDate.Year, MyCalendar.VisibleDate.Month, 1)
        Dim lastDate As DateTime = GetFirstDayOfNextMonth()
        Dim today As DateTime = Date.Today
        dsHolidays = GetCurrentMonthData(firstDate, lastDate)
        dsNoMoved = GetCurrentMonthNoMoved(firstDate, today)
    End Sub

    Protected Sub Calendar1_VisibleMonthChanged(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MonthChangedEventArgs) Handles MyCalendar.VisibleMonthChanged
        FillHolidayDataset()
    End Sub

    Protected Function GetFirstDayOfNextMonth() As DateTime
        Dim monthNumber, yearNumber As Integer
        If MyCalendar.VisibleDate.Month = 12 Then
            monthNumber = 1
            yearNumber = MyCalendar.VisibleDate.Year + 1
        Else
            monthNumber = MyCalendar.VisibleDate.Month + 1
            yearNumber = MyCalendar.VisibleDate.Year
        End If
        Dim lastDate As New DateTime(yearNumber, monthNumber, 1)
        Return lastDate
    End Function

    Function GetCurrentMonthData(ByVal firstDate As DateTime, ByVal lastDate As DateTime) As DataSet

        Dim dsFestivos As New DataSet
        Try
            Dim cs As ConnectionStringSettings
            cs = ConfigurationManager.ConnectionStrings("MiConexion")
            Dim connString As String = cs.ConnectionString
            Dim dbConnection As New SqlConnection(connString)
            Dim queryfestivos As String = "SELECT fecha_fest FROM fechas_festivos WHERE fecha_fest >= @firstDate AND fecha_fest < @lastDate"
            Dim dbCommand As New SqlCommand(queryfestivos, dbConnection)
            dbCommand.Parameters.Add(New SqlParameter("@firstDate", firstDate))
            dbCommand.Parameters.Add(New SqlParameter("@lastDate", lastDate))
            Dim sqlDataAdapter As New SqlDataAdapter(dbCommand)
            sqlDataAdapter.Fill(dsFestivos)

            Me.Label7.Text = lastDate

        Catch ex As Exception
            Me.lblerrorcalendario.Text = ex.ToString
        End Try
        Return dsFestivos
    End Function

    Function GetCurrentMonthNoMoved(ByVal firstDate As DateTime, ByVal today As DateTime) As DataSet

        Dim dsNoMovido As New DataSet
        Dim usuario As String = Me.tbusuariocalendario.Text

        Me.Label5.Text = usuario
        Me.Label6.Text = firstDate
        Me.Label8.Text = today

        Try
            Dim cs As ConnectionStringSettings
            cs = ConfigurationManager.ConnectionStrings("MiConexion")
            Dim connString As String = cs.ConnectionString
            Dim dbConnection As New SqlConnection(connString)
            Dim querynomovido As String = "SELECT no_movido.fecha FROM no_movido, (SELECT id_vehiculo AS id_veh FROM vehiculo_adapt WHERE vehiculo_adapt.usuario = @usuario) WHERE no_movido.fecha >= @firstDate AND no_movido.fecha < @today AND no_movido.id_vehiculo = id_veh"
            Dim dbCommand As New SqlCommand(querynomovido, dbConnection)
            dbCommand.Parameters.Add(New SqlParameter("@usuario", usuario))
            dbCommand.Parameters.Add(New SqlParameter("@firstDate", firstDate))
            dbCommand.Parameters.Add(New SqlParameter("@today", today))
            Dim sqlDataAdapter As New SqlDataAdapter(dbCommand)
            sqlDataAdapter.Fill(dsNoMovido)
        Catch ex As Exception
            Me.lblerrorcalendario.Text = ex.ToString
        End Try
        Return dsNoMovido
    End Function

    Protected Sub Calendar1_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) Handles MyCalendar.DayRender
        Dim nextDate As DateTime

        'Deshabilitamos todos los días
        If e.Day.IsOtherMonth Or Not e.Day.IsOtherMonth Then
            e.Day.IsSelectable = False
        End If

        'Pintamos los no movidos y los habilitamos
        If Not dsNoMoved Is Nothing Then
            For Each dr As DataRow In dsNoMoved.Tables(0).Rows
                nextDate = CType(dr("fecha"), DateTime)
                If nextDate = e.Day.Date Then
                    e.Cell.BackColor = System.Drawing.Color.CornflowerBlue
                    e.Day.IsSelectable = True
                End If
            Next
        End If

        'Pintamos los festivos
        If Not dsHolidays Is Nothing Then
            For Each dr As DataRow In dsHolidays.Tables(0).Rows
                nextDate = CType(dr("fecha_fest"), DateTime)
                If nextDate = e.Day.Date Then
                    e.Cell.BackColor = System.Drawing.Color.Tomato
                End If
            Next
        End If

    End Sub
Espero que me puedan ayudar ya que llevo un par de días con esto y no puedo perder más tiempo. Muchas gracias.
  #2 (permalink)  
Antiguo 05/08/2011, 04:01
 
Fecha de Ingreso: mayo-2011
Mensajes: 60
Antigüedad: 13 años
Puntos: 1
Respuesta: Problema con dataset

Al final he podido descubrir que el problema lo tengo en la 2ª query, sin embargo fuera del code behind funciona correctamente. ¿Alguna idea de como solucionar esto?

Código:
Dim querynomovido As String = "SELECT no_movido.fecha FROM no_movido, (SELECT id_vehiculo AS id_veh FROM vehiculo_adapt WHERE vehiculo_adapt.usuario = @usuario) WHERE no_movido.fecha >= @firstDate AND no_movido.fecha < @today AND no_movido.id_vehiculo = id_veh
El error: System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near the keyword 'WHERE'. en System.Data.SqlClient.SqlConnection.OnError(SqlExc eption exception, Boolean breakConnection) en ...

Última edición por MiGoBi; 05/08/2011 a las 05:45
  #3 (permalink)  
Antiguo 10/08/2011, 08:39
 
Fecha de Ingreso: mayo-2011
Mensajes: 60
Antigüedad: 13 años
Puntos: 1
Respuesta: Problema con dataset

Al final lo he resuelto así:

Código:
    Function GetIdVehiculo(ByVal firstDate As DateTime, ByVal today As DateTime) As DataSet

        Dim dsIdVeh As New DataSet
        Dim dsFecha As New DataSet
        Dim dsNoMovido As New DataSet

        Try
            Dim cs As ConnectionStringSettings
            cs = ConfigurationManager.ConnectionStrings("MiConexion")
            Dim connString As String = cs.ConnectionString
            Dim dbConnection As New SqlConnection(connString)
            Dim queryidvehiculo As String = "SELECT DISTINCT id_vehiculo FROM vehiculo_adapt WHERE vehiculo_adapt.usuario = @usuario"
            Dim dbCommand As New SqlCommand(queryidvehiculo, dbConnection)
            dbCommand.Parameters.Add(New SqlParameter("@usuario", Session("usuario_web")))
            Dim sqlDataAdapter As New SqlDataAdapter(dbCommand)
            sqlDataAdapter.Fill(dsIdVeh)

            'http://msdn.microsoft.com/es-es/library/6zd7cwzh.aspx'
            'http://www.startvbdotnet.com/ado/datatable.aspx'

            Dim tbNoMovido As DataTable
            tbNoMovido = New DataTable("tbNoMovido2")
            'creating a table named tbNoMovido2
            Dim Row As DataRow
            'declaring one row for the table
            Dim id_vehiculo As DataColumn = New DataColumn("id_vehiculo")
            'declaring a column named id_vehiculo
            id_vehiculo.DataType = System.Type.GetType("System.Int64")
            'setting the datatype for the column
            tbNoMovido.Columns.Add(id_vehiculo)
            'adding the column to table
            Dim fecha As DataColumn = New DataColumn("fecha")
            fecha.DataType = System.Type.GetType("System.DateTime")
            tbNoMovido.Columns.Add(fecha)

            'Creamos el dataset'
            'http://social.msdn.microsoft.com/Forums/es/netfxwebes/thread/f829b0c1-6743-45e1-a9a3-8a8be66959dd'

            Dim cont As Integer = 0
            Dim cont2 As Integer = 0
            Dim elem As Integer

            'declaring a new row
            For Each fila As DataRow In dsIdVeh.Tables(0).Rows

                elem = dsIdVeh.Tables(0).Rows(cont)("id_vehiculo")
                cont = cont + 1
                Dim queryfecha As String = "SELECT DISTINCT fecha FROM no_movido WHERE no_movido.id_vehiculo = @elem AND no_movido.fecha >= @firstDate AND no_movido.fecha < @today"
                Dim dbCommand2 As New SqlCommand(queryfecha, dbConnection)
                dbCommand2.Parameters.Add(New SqlParameter("@firstDate", firstDate))
                dbCommand2.Parameters.Add(New SqlParameter("@today", today))
                dbCommand2.Parameters.Add(New SqlParameter("@elem", elem))
                Dim sqlDataAdapter2 As New SqlDataAdapter(dbCommand2)
                sqlDataAdapter2.Fill(dsFecha)
                cont2 = 0

                For Each fila2 As DataRow In dsFecha.Tables(0).Rows
                    Row = tbNoMovido.NewRow()
                    Row.Item("id_vehiculo") = elem
                    'filling the row with values. adding a id_vehiculo
                    Row.Item("fecha") = dsFecha.Tables(0).Rows(cont2)("fecha")
                    'filling the row with values. adding a fecha 
                    tbNoMovido.Rows.Add(Row)
                    cont2 = cont2 + 1
                Next

            Next

            dsNoMovido.Tables.Add(tbNoMovido)
            'adding the table to dataset 

        Catch ex As Exception
            Me.lblerrorcalendario3.Text = ex.ToString
        End Try
        Return dsNoMovido
    End Function

Etiquetas: 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




La zona horaria es GMT -6. Ahora son las 01:18.