none
Update no puede encontrar TableMapping['Table'] o DataTable RRS feed

  • Pregunta

  • se me ha presentado un problema que no he logrado solucionar se trata de que cuando agrego una nueva fila a un dataTable ese posee una columna incremental y pues ese valor es por default por lo que no le paso valor, pero tengo otra columna y le paso un valor, me da curiosidad que cuando ago el sigueinte codigo :

    filaCarpetas = datasetCompleto.Tables("Carpetas").NewRow()
    filaCarpetas("NombreMateria") = cajaMateria.Text
        datasetCompleto.Tables("Carpetas").Rows.Add(filaCarpetas)
        datasetCompleto.Tables("Carpetas").AcceptChanges()
    datasetCompleto.AcceptChanges()

    supuestamente confirmo los valores introducidos y me generaría el valor incremental pero no ocurre asi, luego recorro el dataTable para ver los datos almacenados, los que ya están almacenados me los muestra bien, es decir el de la la columna incremental y el de la otra columna, pero en la ultima fila que ingrese no me muestra el valor incremental solo me muestra el de la segunda columna que es un valor tipo string.

    el codigo que uso para recorrer la tabla es el siguiente:

    Dim tablaprueba As DataTable
        tablaprueba = datasetCompleto.Tables("Carpetas")
    
        For Each fprueba In tablaprueba.Rows
          MessageBox.Show(fprueba(0).ToString & "-" & fprueba(1).ToString)
        Next

    pero cuando le doy update no registra en el origen de datos el nuevo valor, y antes me producía un error qeu decia: Update no puede encontrar TableMapping['Table'] o DataTable

    pero cambie de este codigo :

    ObjconexionPpal.adaptadordeDatos.Update(datasetCompleto)

    a este: donde espesificaba que tabla era la que queria actualizar

    ObjconexionPpal.adaptadordeDatos.Update(datasetCompleto, "Carpetas")

    porque el dataset creado contiene en este caso tres tablas y dos relaciones. pero como digo no registra los datos en el origen de datos

    este es el codigo que utilizo para crear el dataset:

    'esto es en la capa de acceso a datos
    atributo de mi capa de datos
      'conexion
      Protected Friend conexxion As SqlConnection 'protected: acceso desde esta clase y desde sus ensamblados
      'adaptador de datos
      Protected Friend adaptadordeDatos As SqlDataAdapter
      'creo el objeto de comando
      Protected Friend comando As SqlCommand
      'creo un dataset
      Protected Friend odataset As DataSet
    
    
    
    Public Sub New(ByVal sentencia As String) 'constructor que abre la conexion con un datasert
        'creo el adaptador de datos
        Try
          conexxion = New SqlConnection
          'paso la cadena de conexion
          conexxion.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\yari\Desktop\copia de seguridad\BD\Fotocopiadora.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
          adaptadordeDatos = New SqlDataAdapter(sentencia, conexxion)
    
        Catch ex As SqlException
          MessageBox.Show("Fallo la Conexion con la Base de Datos", "Error De Conexion", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    
    Public Function llenarDatasetTablas(ByVal nombresTablas As ArrayList) As DataSet
        'caqrgo una dataset de tablas
        'ByVal tablas As ArrayList
        Dim objetonumerador As IEnumerator
        Dim sentenciaSelectcomand As String
    
        '********************************************************
        odataset = New DataSet()
        objetonumerador = nombresTablas.GetEnumerator() ''devuelbe un enumerado o iteracion simple para que se produsca una especie de siclo
        objetonumerador.MoveNext()
        Try
    
          'cargo la primera tabla en el dataset
          adaptadordeDatos.Fill(odataset, objetonumerador.Current.ToString)
          objetonumerador.MoveNext() 'muevo al segundo nombre de tablas
    
    
          Do
            sentenciaSelectcomand = "SELECT * FROM " & objetonumerador.Current.ToString
            adaptadordeDatos.SelectCommand.CommandText = sentenciaSelectcomand
            adaptadordeDatos.Fill(odataset, objetonumerador.Current.ToString)
          Loop While objetonumerador.MoveNext()
    
    
        Catch
          MessageBox.Show("Fallo la Conexion con la Base de Datos", "Error De Conexion", MessageBoxButtons.OK, MessageBoxIcon.Error)
    
        End Try
    
        Return odataset
    
      End Function
    
    
    '***************
    Public Function relacionarDatasetTablas(ByVal nombreRelaciones As ArrayList) As DataSet
        'Public Function relacionarDatasetTablas(ByVal objetoDataset As DataSet, ByVal nombreRelaciones As String) As DataSet
    
        Dim posicion As Integer
    
        Dim enumerador_nombreRelaciones As IEnumerator
    
        Try
          enumerador_nombreRelaciones = nombreRelaciones.GetEnumerator()
    
    
          While enumerador_nombreRelaciones.MoveNext
            'aqui creo las relaciones
            odataset.Relations.Add(enumerador_nombreRelaciones.Current, _
            odataset.Tables(vector_structuraRelacion(posicion).nombreTabla1.ToString).Columns(vector_structuraRelacion(posicion).nombreColumnaTB1.ToString), _
            odataset.Tables(vector_structuraRelacion(posicion).nombreTabla2.ToString).Columns(vector_structuraRelacion(posicion).nombreColumnaTB2.ToString))
            posicion += 1
          End While
    
        Catch ex As Exception
          MessageBox.Show("Ocurrio el siguiente error: " & ex.Message, "Disculpe las molestias pero", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    
    
        Return odataset
      End Function

    ahora este es el codigo con el que lleno el dataset con las tablas y con las relaciones:

    Module DeclaracionesCrearMateria
      Public Structure structuraRelacion
    
        Dim nombreTabla1 As String
        Dim nombreColumnaTB1 As String
        Dim nombreTabla2 As String
        Dim nombreColumnaTB2 As String
    
      End Structure
    
      Public vector_structuraRelacion() As structuraRelacion
    
      Public ObjconexionPpal As AccesoaDatos
      Public datasetCompleto As DataSet
    
      ''declaracion de las tablas que manejanaran los dataset
      'Public tablaDatosProfesor As DataTable
      'Public tablaCarpetas As DataTable
      'Public tablaRelacionProfCarpeta As DataTable
    
    
    
      Public Function llenarDataset() As DataSet
        Dim nombredeTablas, nombreRelaciones As ArrayList
        Dim cadenaInicial As String
    
    
        'inicio los arraylist
        nombredeTablas = New ArrayList
        nombreRelaciones = New ArrayList
    
        'establesco los nombres de las tablas
        nombredeTablas.Add("DatosProfesor")
        nombredeTablas.Add("Carpetas")
        nombredeTablas.Add("RelacionProfCarpeta")
    
        'cargo el adaptador de datos, mandandole la primera consulta
        cadenaInicial = "Select * from DatosProfesor"
        ObjconexionPpal = New AccesoaDatos(cadenaInicial)
    
        'lleno el dataset con las tablas que lo compondran
        datasetCompleto = ObjconexionPpal.llenarDatasetTablas(nombredeTablas)
    
        'agrego al dataset las relaciones entre las tablas
        '*primera relacion
        nombreRelaciones.Add("RelacionDatosProfesor-RelacionProfcarpeta")
    
        ReDim vector_structuraRelacion(0)
        vector_structuraRelacion(0).nombreTabla1 = "DatosProfesor"
        vector_structuraRelacion(0).nombreColumnaTB1 = "Cedula"
        vector_structuraRelacion(0).nombreTabla2 = "RelacionProfCarpeta"
        vector_structuraRelacion(0).nombreColumnaTB2 = "Cedula"
    
        '*segunda relacion
        nombreRelaciones.Add("RelacionCarpetas-RelacionProfcarpeta")
        ReDim Preserve vector_structuraRelacion(1)
        vector_structuraRelacion(1).nombreTabla1 = "Carpetas"
        vector_structuraRelacion(1).nombreColumnaTB1 = "CodigoMateria"
        vector_structuraRelacion(1).nombreTabla2 = "RelacionProfcarpeta"
        vector_structuraRelacion(1).nombreColumnaTB2 = "CodigoMateria"
        'envio la relacion y obtengo el datset relacionado
        datasetCompleto = ObjconexionPpal.relacionarDatasetTablas(nombreRelaciones)
    
        Return datasetCompleto
      End Function
    
    End Module
    
    
    
    

    y este es el codigo con el que trato de agregar la nueva fila:

    llenarDataset()'esto va en load del formulario
    Dim filaCarpetas As DataRow
        Dim filaRelacionProfCarpetas As DataRow
        Dim fprueba As DataRow
    
    
    
        filaCarpetas = datasetCompleto.Tables("Carpetas").NewRow()
    
         filaCarpetas("NombreMateria") = cajaMateria.Text
        datasetCompleto.Tables("Carpetas").Rows.Add(filaCarpetas)
        datasetCompleto.Tables("Carpetas").AcceptChanges()
        datasetCompleto.AcceptChanges()
    
        Dim tablaprueba As DataTable
        tablaprueba = datasetCompleto.Tables("Carpetas")
    
        For Each fprueba In tablaprueba.Rows
          MessageBox.Show(fprueba(0).ToString & "-" & fprueba(1).ToString)
        Next
        'ObjconexionPpal.odataset = datasetCompleto.Copy
    
    
        ObjconexionPpal.adaptadordeDatos.Update(datasetCompleto, "Carpetas")
    de antemano agradezco toda la ayuda que me puedan brindar :D


    felix
    jueves, 10 de junio de 2010 16:04