Problema en un Fill de un DataAdapter OleDb
Publicado por Leo (1 intervención) el 30/03/2012 12:43:27
Hola compañeros!
Tengo una base de datos tipo SQLServer y una aplicación en Visual Basic Express que trata de extraer datos de la misma. El tema es que tengo un problema del Tipo ArgumentNullException que se produce al intentar hacer el Fill en los DataAdapter y no se como solucionarlo. La base de datos está bien y contiene datos ya que al extraer datos empleando las herramientas visuales de Visual (DataSet, BindingSource y TableAdapter) no tengo problemas, pero al intentar hacerlo mediante código y empleando OleDb no hay manera.
Os muestro el código a ver si podéis ayudarme. Muchas Gracias!!!
REM se importa oleDb
Imports System.Data.OleDb
Public Class frmOfertas
REM se declara "DSBase" como un DataSet
Public DSBase1 As New DataSet("DSBase")
Private filas() As DataRow
Private fila As DataRow
Private enlazado As Integer
Private Sub frmOfertas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
REM se declara un objeto connection y dos objetos DataAdapter (uno por tabla)
Dim ConBase As OleDbConnection
Dim DATiposViajes As OleDbDataAdapter
Dim DAViajes As OleDbDataAdapter
Dim rel As DataRelation
REM se crea el objeto connection
ConBase = New OleDbConnection()
REM se indica la cadena e conexión en la propiedad "ConnectionString" del objeto "Connection"
ConBase.ConnectionString = "Provider=SQLOLEDB;" & "Integrated Security=SSPI;" & _
"Persist Security Info=False;" & "Initial Catalog =PracticasL;" & _
"Data Source=.\SQLEXPRESS;" & _
"AttachDbFilename=C:\Users\L\Desktop\PRÁCTICAS\PracticasL.mdf;" & _
"Integrated Security=True;" & "Connect Timeout=30;" & "User Instance=True;"
REM se crean los objetos DataAdapter
DATiposViajes = New OleDbDataAdapter("SELECT Lugar FROM [Tipos de viajes]", ConBase)
DAViajes = New OleDbDataAdapter("SELECT FechaInicio FROM Viajes", ConBase)
REM se rellenan los "DataAdapter" con los datos de la tablas
DATiposViajes.Fill(DSBase1.Tables("Tipos de viajes"))
DAViajes.Fill(DSBase1.Tables("Viajes"))
REM se crea la relación entre las tablas "Tipos de viajes" (uno) y "Viajes" (muchos)
rel = New DataRelation("TiposviajesViajes", _
DSBase1.Tables("Tipos de viajes").Columns("CodigoTipoViaje"), _
DSBase1.Tables("Viajes").Columns("CodigoTipoViaje"), True)
REM se añade la relación a Relations del DataSet
DSBase1.Relations.Add(rel)
REM se crean los objetos "Binding" y se enlazan con los controles existentes en el Form1
txtLugar.DataBindings.Add(New Binding("Text", DSBase1, "Tipos de viajes.Lugar"))
txtPais.DataBindings.Add(New Binding("Text", DSBase1, "Tipos de viajes.Pais"))
txtTipoTransporte.DataBindings.Add(New Binding("Text", DSBase1, "Tipos de viajes.TipoTransporte"))
txtImporte.DataBindings.Add(New Binding("Text", DSBase1, "Tipos de viajes.Importe"))
enlazado = Me.BindingContext(DSBase1, "Tipos de viajes").Position
filas = DSBase1.Tables("Tipos de viajes").Rows(enlazado).GetChildRows("TiposviajesViajes")
REM se eliminan los elementos que pueda haber en el lstViajes
lstViajes.Items.Clear()
REM se añaden las filas con la información al lstViajes
For Each fila In filas
lstViajes.Items.Add("Reservado por el cliente: " & fila("CodigoCliente") & fila("PlazasReservadas") & " plazas " & "y con fecha de inicio el: " & fila("FechaInicio"))
Next
End Sub
Private Sub cmdAdelante_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAdelante.Click
Dim posicion As Integer = Me.BindingContext(Me.DSBase1, "Tipos de Viajes").Position
Dim contar As Integer = Me.BindingContext(Me.DSBase1, "Tipos de viajes").Count
If (posicion < contar) Then
Me.BindingContext(DSBase1, "Tipos de viajes").Position += 1
Else
Me.BindingContext(DSBase1, "Tipos de viajes").Position = contar
End If
End Sub
Private Sub cmdAtras_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAtras.Click
If (Me.BindingContext(DSBase1, "Tipos de viajes").Position > 0) Then
Me.BindingContext(DSBase1, "Tipos de viajes").Position -= 1
Else
Me.BindingContext(DSBase1, "Tipos de viajes").Position = 0
End If
End Sub
Private Sub cmdCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCerrar.Click
Me.Close()
End Sub
End Class
Tengo una base de datos tipo SQLServer y una aplicación en Visual Basic Express que trata de extraer datos de la misma. El tema es que tengo un problema del Tipo ArgumentNullException que se produce al intentar hacer el Fill en los DataAdapter y no se como solucionarlo. La base de datos está bien y contiene datos ya que al extraer datos empleando las herramientas visuales de Visual (DataSet, BindingSource y TableAdapter) no tengo problemas, pero al intentar hacerlo mediante código y empleando OleDb no hay manera.
Os muestro el código a ver si podéis ayudarme. Muchas Gracias!!!
REM se importa oleDb
Imports System.Data.OleDb
Public Class frmOfertas
REM se declara "DSBase" como un DataSet
Public DSBase1 As New DataSet("DSBase")
Private filas() As DataRow
Private fila As DataRow
Private enlazado As Integer
Private Sub frmOfertas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
REM se declara un objeto connection y dos objetos DataAdapter (uno por tabla)
Dim ConBase As OleDbConnection
Dim DATiposViajes As OleDbDataAdapter
Dim DAViajes As OleDbDataAdapter
Dim rel As DataRelation
REM se crea el objeto connection
ConBase = New OleDbConnection()
REM se indica la cadena e conexión en la propiedad "ConnectionString" del objeto "Connection"
ConBase.ConnectionString = "Provider=SQLOLEDB;" & "Integrated Security=SSPI;" & _
"Persist Security Info=False;" & "Initial Catalog =PracticasL;" & _
"Data Source=.\SQLEXPRESS;" & _
"AttachDbFilename=C:\Users\L\Desktop\PRÁCTICAS\PracticasL.mdf;" & _
"Integrated Security=True;" & "Connect Timeout=30;" & "User Instance=True;"
REM se crean los objetos DataAdapter
DATiposViajes = New OleDbDataAdapter("SELECT Lugar FROM [Tipos de viajes]", ConBase)
DAViajes = New OleDbDataAdapter("SELECT FechaInicio FROM Viajes", ConBase)
REM se rellenan los "DataAdapter" con los datos de la tablas
DATiposViajes.Fill(DSBase1.Tables("Tipos de viajes"))
DAViajes.Fill(DSBase1.Tables("Viajes"))
REM se crea la relación entre las tablas "Tipos de viajes" (uno) y "Viajes" (muchos)
rel = New DataRelation("TiposviajesViajes", _
DSBase1.Tables("Tipos de viajes").Columns("CodigoTipoViaje"), _
DSBase1.Tables("Viajes").Columns("CodigoTipoViaje"), True)
REM se añade la relación a Relations del DataSet
DSBase1.Relations.Add(rel)
REM se crean los objetos "Binding" y se enlazan con los controles existentes en el Form1
txtLugar.DataBindings.Add(New Binding("Text", DSBase1, "Tipos de viajes.Lugar"))
txtPais.DataBindings.Add(New Binding("Text", DSBase1, "Tipos de viajes.Pais"))
txtTipoTransporte.DataBindings.Add(New Binding("Text", DSBase1, "Tipos de viajes.TipoTransporte"))
txtImporte.DataBindings.Add(New Binding("Text", DSBase1, "Tipos de viajes.Importe"))
enlazado = Me.BindingContext(DSBase1, "Tipos de viajes").Position
filas = DSBase1.Tables("Tipos de viajes").Rows(enlazado).GetChildRows("TiposviajesViajes")
REM se eliminan los elementos que pueda haber en el lstViajes
lstViajes.Items.Clear()
REM se añaden las filas con la información al lstViajes
For Each fila In filas
lstViajes.Items.Add("Reservado por el cliente: " & fila("CodigoCliente") & fila("PlazasReservadas") & " plazas " & "y con fecha de inicio el: " & fila("FechaInicio"))
Next
End Sub
Private Sub cmdAdelante_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAdelante.Click
Dim posicion As Integer = Me.BindingContext(Me.DSBase1, "Tipos de Viajes").Position
Dim contar As Integer = Me.BindingContext(Me.DSBase1, "Tipos de viajes").Count
If (posicion < contar) Then
Me.BindingContext(DSBase1, "Tipos de viajes").Position += 1
Else
Me.BindingContext(DSBase1, "Tipos de viajes").Position = contar
End If
End Sub
Private Sub cmdAtras_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAtras.Click
If (Me.BindingContext(DSBase1, "Tipos de viajes").Position > 0) Then
Me.BindingContext(DSBase1, "Tipos de viajes").Position -= 1
Else
Me.BindingContext(DSBase1, "Tipos de viajes").Position = 0
End If
End Sub
Private Sub cmdCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCerrar.Click
Me.Close()
End Sub
End Class
Valora esta pregunta
0