OdbcDataAdapter Update



  • Hallo...

    Versuche schon länger ein .dbf (dBase) Datei mittels OdbcDataAdapter->Update nach einer Veränderung der Daten wieder zu speichern. Die Daten werden in einem DataGridView angezeigt.

    Mit dem untenstehenden Code bekomme ich folgender Fehler:

    Dynamische SQL-Generierung für den UpdateCommand wird nicht für einen SelectCommand unterstützt, der keine Schlüsselspalteninformationen zurückgibt.

    Soweit ich weiss, hat die Datei, welche ich auslese keinen Primären Schlüssel.

    Wie kann ich nun die Daten speichern? Muss ich einen Primären Schlüssel erzeugen.

    Erbitte um Rat 🙂

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.Odbc;
    
    namespace DbfReadWriteTest1
    {
        public partial class Form1 : Form
        {
            OdbcDataAdapter adapter = new OdbcDataAdapter("SELECT * FROM C:\\databases\\BW080117.DBF", "Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=C:\\databases\\;Exclusive=No; Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;");
            DataTable dTable = new DataTable();
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void ButtonReadDBF_Click(object sender, EventArgs e)
            {
                adapter.Fill(dTable);
    
                BindingSource Source = new BindingSource();
    
                Source.DataSource = dTable;
    
                dataGridView1.DataSource = Source;           
            }
    
            private void ButtonWriteDBF_Click(object sender, EventArgs e)
            {            
                OdbcCommandBuilder cb = new OdbcCommandBuilder(adapter);
                adapter.UpdateCommand = cb.GetUpdateCommand();
    
                adapter.Update(dTable);            
            }
        }
    }
    


  • Lightforce schrieb:

    Wie kann ich nun die Daten speichern? Muss ich einen Primären Schlüssel erzeugen.

    Ja.



  • witte schrieb:

    Lightforce schrieb:

    Wie kann ich nun die Daten speichern? Muss ich einen Primären Schlüssel erzeugen.

    Ja.

    Wie kann ich einen Primären Schlüssel erzeugen? Die Datei selbst darf keinen Primären Schlüssel haben.

    Ein Beispiel würde mir helfen.



  • Ich weiß nicht wie man in DBase einen Primärschlüssel erzeugt. Du mußt da selber 'googlen'. Ado.Net kennt das Konzept der serverseitigen Schreib-Cursoren nicht, zur Aktualisierung können nur Primärschlüssel verwendet werden.
    Oder du setzt manuall die Update-Befehle ab, was sehr aufwändig ist:
    Update tabelle set col1=<col1 neuer wert>,col2=<col2 neuer wert>, ... where col1=<col1 alter wert> and col2=<col2 alter wert> and ...



  • Das wäre vielleicht eine Möglichkeit, welche aber auch nicht so elegant ist. Werde mich wieder melden, sobald ich ein wenig weiter bin mit meinem Problem.
    Vielen Dank

    Lightforce


Anmelden zum Antworten