VB.NET Fehler beim Update einer DataTable

MasterDS

Erfahrenes Mitglied
Hallo!

Wie schon der Titel verrät, habe ich ein Problem mit dem Update einer DataTable. Diese stammt ursprünglich aus einer Paradox-Datenbank, welche nun aktualisiert werden soll. Es wurden lediglich neue Zeilen eingefügt. Keine Änderungen oder Löschungen.

Folgender Code:

Code:
Public Shared Function DBAktualisieren(ByVal DBPfad As String, ByVal Datenbankname As String, ByVal geänderteDT As DataTable) As Boolean
        Dim cnn As OleDb.OleDbConnection = Nothing
        Dim command As OleDb.OleDbCommand
        Dim Adapter As OleDb.OleDbDataAdapter 
        Dim combuilder As OleDb.OleDbCommandBuilder

        Try
            cnn = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBPfad & ";Extended Properties=Paradox 5.x;")
            cnn.Open()
            Command = New OleDb.OleDbCommand("SELECT * FROM " & Datenbankname, cnn)
            Adapter = New OleDb.OleDbDataAdapter(Command)
            combuilder = New OleDb.OleDbCommandBuilder(Adapter)
            Console.WriteLine(combuilder.GetInsertCommand())    <-- Testzeile! Aber schon hier tritt der Fehler auf!
            Adapter.Update(geänderteDT)

            Return True
        Catch ex As Exception
            Console.WriteLine(ex.Message)
            Log(ex.Message)
            Return False
        Finally
            Adapter.Dispose()
            combuilder = Nothing
            cnn.Close()
        End Try
    End Function

In der markierten Zeile erhalte ich folgenden Fehler:
Dynamische SQL-Generierung wird für einen SelectCommand, der keine Basistabelleninformationen zurückgibt, nicht unterstützt.

Kann mir jemand sagen, was das bedeutet und was ich tun kann?

Danke vorab.

MasterDS
 
Hallo Norbert! Danke für den Tipp, hat aber leider nicht funktioniert.

Immernoch:
 

Anhänge

  • FehlerProg.jpg
    FehlerProg.jpg
    14,4 KB · Aufrufe: 87
Also ich habe jetzt noch etwas anderes Probiert und bin dem Problem glaube ich etwas näher gekommen.

Ich habe ausprobiert, ob ich mit einfachen INSERT Statements und anschliessendem "ExecuteNonQuery" weiter komme. Da allerdings erhalte ich die Meldung:
OleDbException: Operation muss eine aktualisierbare Abfrage verwenden

Jetzt habe ich über google herausgefunden, dass dies am Primärschlüssel liegen kann, sofern keiner da ist! Und siehe da... In der Datenbank ist kein Primärschlüssel.

Wie bekomme ich denn jetzt die Daten in die Datenbank, ohne einen Primärschlüssel zu definieren? Ich vermute mal, dass das auch die Ursache beim Commandbuilder war/ist.

Jemand eine Idee?
 
Für alle die es Interessiert, das Problem ist behoben/umgangen.

Die ExecuteNonQuery Statements lassen sich nun ausführen. Problem war, dass ich aus Sicherheit die DB vorab in ein anderes Verzeichnis kopiert habe. Allerdings NUR die DB. Nicht die entsprechenden Index-Dateien. So konnte die DB nicht aktualisiert werden. Was immer noch nicht geht, ist die Sache mit dem Commandbuilder. Aber da gehe ich nun halt den umständlichen Weg über einzelne Inserts und Updates. Geht auch, wenn auch nicht soooo ultra performant.

Trotzdem vielen Dank an diejenigen, die sich mit mir den Kopf zerbrochen haben.

Schönen Tag noch! :)
 

Neue Beiträge

Zurück