vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
DataSet in Access-Datenbank importieren 
Autor: Cpt.Fly
Datum: 14.10.11 18:11

Hallo zusammen,

ich stehe vor folgendem Problem:

Ich muss Daten aus einer Access-Datenbank exportieren und anschließend an einem anderen Standort die Daten wieder importieren.

Was schon funktioniert:
- Datensätze nach XML-Files exportieren
- XML-Files in ein DataSet einlesen.

Nun steh ich vor dem Problem das ich die Daten aus dem DataSet wieder in die Access-Tabelle schreiben muss. Wie kann ich die Daten in die Access-Datenbank schreiben ohne einen endlos langen INSERT-Befehl von Hand zu erstellen? (CommandBuilder???)

Folgende Sub hab ich bisher:
 
    Private Sub ImportTableToSQL(ByRef aDataTable As DataTable, ByRef _
      aConnection As OleDb.OleDbConnection, ByVal MyTableName As String)
 
        ' Create a command for the DataAdapter
        Dim cmd As New OleDb.OleDbCommand("Select * From " & MyTableName, _
          aConnection)
 
        ' Create the DataAdapter (needed for creating the sql-statement)
        Dim da As New OleDb.OleDbDataAdapter(cmd)
 
        ' Fill our DataAdapter with Data from our DataTable
        da.FillSchema(aDataTable, SchemaType.Source)
        da.Fill(aDataTable.DataSet, aDataTable.TableName)
 
        ' Create the SQL Command Builder
        Dim cb As New OleDb.OleDbCommandBuilder(da)
        cb.SetAllValues = False
 
        ' Go thru all rows and insert the data
        For Each r As DataRow In aDataTable.Rows
 
            ' Create the Insert-Command
            Dim cmdResult As New OleDb.OleDbCommand( _
              cb.GetInsertCommand.CommandText, aConnection)
            cmdResult.Parameters.Clear()
 
            Dim i As Integer = 0
 
            ' Go thru all columns in our DataTable and create a SQLParameter 
            ' for our Statement with the value
            ' from our DataTable.
            For Each col As DataColumn In aDataTable.Columns
                i += 1
                'cmdResult.Parameters.Add("@p" & i, col.DataType).Value = 
                ' r.Item(col.ColumnName)
                cmdResult.Parameters.AddWithValue("@p" & i, r.Item( _
                  col.ColumnName))
            Next
 
            Debug.Print("ImportTableToSQL: " & cmdResult.CommandText)
 
            Dim iAffectedRecords As Integer = cmdResult.ExecuteNonQuery()
            Debug.Print("Records Affected: " & iAffectedRecords)
 
        Next
 
    End Sub
Das Ergebnis vom CommandBuilder schaut dann so aus:
 
INSERT INTO CLI (CODICE, NOME, INDIRIZZO, CAP, CITTA, TELEFONO, DATA_NASC, _
  LUOGO_NASC, TIPO_DOC, DOCUMENTO, ENTE_DOC, DATA_C, DATA_R, DATA_M, ORA_M, _
  RES_M, OMA_M, SALDO_OK, SCR1, SCR2, DEBITO, DATA_D, ORA_D, SCONTO, APPUNTI, _
  ABIL, FIDO, NVHS, MESSAGGIO, LANG, CC1, MODIF, EMAIL, NOL, CARD, FLG1, FLG2, _
  FLG3, GSM, SMS, CONTRACT_STATE, CARD_CATCH, X_NEXT_MSHIP) VALUES (?, ?, ?, ?, _
  ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, _
  ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
Warum bekommt er die Daten da nicht mit rein?

Wäre für jede Hilfe Dankbar!!!

Cpt.Fly
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataSet in Access-Datenbank importieren 
Autor: ModeratorFZelle (Moderator)
Datum: 15.10.11 01:25

1. Alle ADO.NET Objekte sind für kurze Lebenszeit ausgelegt, also bitte nicht eine einzelne globale Connection.

2. Wenn du ein DataAdapter.Fill machst werden alle Rows als Unverändert markiert, also kann ein Anschliessendes Adapter.Update keinen Datensatz mehr zum Updaten finden.
Das kann man ändern durch da.AcceptChangesDuringFill beim befüllen der DataTable.

3. Du musst da nichts von hand machen, wenn du wirklich nur lesen und schreiben willst.

4. Wozu die Übergabe der DataTable? Was soll der Zugriff auf dt.DataSet?

5. So sieht halt ein CommandText aus, wenn man mit Parametern arbeitet, erst das senden per ExecuteNonQuery oder Adapter.Update setzt die entsprechenden Werte.

6. Bitte schau dir dringend nochmal an was ByRef macht, bestimmt nicht was du hier erwartest.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel