UPDATE: Der Code zur BULK-COPY funktioniert (Es hat lediglich der Pfad im ConnectionString nicht gestimmt). Die Update-Sache funktioniert aber weiterhin nicht. Wenn ich die BULK-COPY mehrmals ausführe erhalte ich einen Fehler im Sinne von: "Manche Datensätze mit den selben PrimaryKeys sind bereits vorhanden -> kopieren fehlgeschlagen" Wie umgehe ich dieses Problem. Ich möchte sowohl nicht vorhandene Datensätze hinzufügen als auch vorhandene Datensätze updaten.
------------------------------------------------------------------------------------------------------
Hallo zusammen,
mit dem folgenden Code versuche ich eine Excelmappe in ein Dataset einzulesen und dann dieses Dataset via Updatecommand in die Datenbank zu befördern. Das Dataset wird korrekt mit den Daten aus der Exceldatei befüllt. Auch der Rest des Codes läuft durch ohne einen Fehler auszugeben. Sobald ich die Anwendung beende und im Datenbankexplorer den Tabelleninhalt meiner Datenbank prüfen will muss ich leider jedes mal feststellen, dass trotz fehlerfreien Durchlaufs keine Daten übertragen werden.
Ein anderer Lösungsansatz mittels Bulk-Copy führt leider zu dem selben Ergebnis (fehlerfreier Durchlauf, keine Daten übertragen)
Was mache ich hier falsch? Gibt es alternative Lösungsansätze bzw. ist meiner vielleicht total ungeeignet?
Vielen Dank im Voraus
------------------------------------------------------------------------------------------------------
Hallo zusammen,
mit dem folgenden Code versuche ich eine Excelmappe in ein Dataset einzulesen und dann dieses Dataset via Updatecommand in die Datenbank zu befördern. Das Dataset wird korrekt mit den Daten aus der Exceldatei befüllt. Auch der Rest des Codes läuft durch ohne einen Fehler auszugeben. Sobald ich die Anwendung beende und im Datenbankexplorer den Tabelleninhalt meiner Datenbank prüfen will muss ich leider jedes mal feststellen, dass trotz fehlerfreien Durchlaufs keine Daten übertragen werden.
Ein anderer Lösungsansatz mittels Bulk-Copy führt leider zu dem selben Ergebnis (fehlerfreier Durchlauf, keine Daten übertragen)
Was mache ich hier falsch? Gibt es alternative Lösungsansätze bzw. ist meiner vielleicht total ungeeignet?
Vielen Dank im Voraus
VB.NET-Quellcode
- 'UPDATECOMMAND METHODE
- Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
- Dim DS As System.Data.DataSet
- Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
- Dim MyConnectionExcel As System.Data.OleDb.OleDbConnection
- MyConnectionExcel = New System.Data.OleDb.OleDbConnection( _
- "Provider=Microsoft.ACE.OLEDB.12.0; " & _
- "data source=C:\Users\qxf8451\Desktop\export.xlsx; " & _
- "Extended Properties=Excel 12.0;")
- ' Select the data from Sheet1 of the workbook.
- MyCommand = New System.Data.OleDb.OleDbDataAdapter( _
- "select * from [Sheet1$]", MyConnectionExcel)
- DS = New System.Data.DataSet()
- MyCommand.Fill(DS)
- Dim keyColumn(2) As DataColumn
- keyColumn(0) = DS.Tables(0).Columns("Bestellnummer") 'Die Spaltenüberschrift in der Exceldatei
- keyColumn(1) = DS.Tables(0).Columns("Bestellposition") 'Die Spaltenüberschrift in der Exceldatei
- DS.Tables(0).PrimaryKey = keyColumn
- ' Create a new Connection and SqlDataAdapter
- Dim myConnection As SqlConnection
- Dim mySqlDataAdapter As SqlDataAdapter
- myConnection = new SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\qxf8451\Desktop\VS Beschaffungsmanager 2015\VS Beschaffungsmanager 2015\bin\Debug\DB_Beschaffungsmanager.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
- mySqlDataAdapter = New SqlDataAdapter("Select * from tblSapDaten", myConnection)
- 'Dim myDataSet as DataSet = new DataSet()
- 'Dim myDataRow As DataRow
- ' Create command builder. This line automatically generates the update commands for you, so you don't
- ' have to provide or create your own.
- Dim myDataRowsCommandBuilder As SqlCommandBuilder = New SqlCommandBuilder(mySqlDataAdapter)
- ' Set the MissingSchemaAction property to AddWithKey because Fill will not cause primary
- ' key & unique key information to be retrieved unless AddWithKey is specified.
- mySqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
- mySqlDataAdapter.UpdateCommand = myDataRowsCommandBuilder.GetUpdateCommand(True)
- mySqlDataAdapter.InsertCommand = myDataRowsCommandBuilder.GetInsertCommand(True)
- mySqlDataAdapter.Update(DS, "Table")
- mySqlDataAdapter.AcceptChangesDuringUpdate = True
- MyConnectionExcel.Close()
- End Sub
VB.NET-Quellcode
- 'BULK-COPY METHODE
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim sqlConnectionZiel As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\qxf8451\Desktop\VS Beschaffungsmanager 2015\VS Beschaffungsmanager 2015\bin\Debug\DB_Beschaffungsmanager.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
- Dim OleDbConnectionQuelle As New System.Data.OleDb.OleDbConnection( _
- "Provider=Microsoft.ACE.OLEDB.12.0; " & _
- "data source=C:\Users\qxf8451\Desktop\export.xlsx; " & _
- "Extended Properties=Excel 12.0;")
- Dim oleDbccommandBackup As OleDb.OleDbCommand = New System.Data.OleDb.OleDbCommand("select * from [Sheet1$]", OleDbConnectionQuelle)
- OleDbConnectionQuelle.Open()
- sqlConnectionZiel.Open()
- Dim oledbReader As OleDbDataReader = oleDbccommandBackup.ExecuteReader
- Using sqlbulkcopy As New SqlBulkCopy(sqlConnectionZiel)
- sqlbulkcopy.DestinationTableName = "tblSapDaten"
- sqlbulkcopy.WriteToServer(oledbReader)
- OleDBConnectionQuelle.Close()
- sqlConnectionZiel.Close()
- End Using
- End Sub
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TheProfessor“ ()