DBConcurrency-Ausnahmefehler beim Aktualisieren mit Dataadapter

Ich versuche zu bearbeitenDataTable Befüllt vonNpgsqlDataAdapter. Nach dem Aufruf vonFill() Methode, ich habe nur eine Zeile inDataTable. Dann habe ich nur den Wert einer Spalte geändert und versucht, wie unten beschrieben zu aktualisieren.

Dann erhalte ich diesen Fehler:

DBConcurrencyException occured

Mein Code ist:

NpgsqlDataAdapter getAllData = new NpgsqlDataAdapter("SELECT sn,
code,product, unitprice, quantity, InvoiceNo, Date FROM stocktable WHERE Code='" + product + "'
 ORDER BY EDate ASC", DatabaseConnectionpg);
DataTable ds1 = new DataTable();
ds1.Clear();
getAllData.Fill(ds1);

if (ds1.Rows.Count > 0)
{
    ds1.Rows[0]["Quantity"] = qty;// calculated value
}
ds1 = ds1.GetChanges();

NpgsqlCommandBuilder cb = new NpgsqlCommandBuilder(getAllData);
//getAllData.RowUpdating += (sender2, e2) => { e2.Command.Parameters.Clear(); };
//cb.SetAllValues = false;
getAllData.DeleteCommand = cb.GetDeleteCommand();
getAllData.InsertCommand = cb.GetInsertCommand();
getAllData.UpdateCommand = cb.GetUpdateCommand();
int x = getAllData.Update(ds1);
if (x > 0)
{
    ds1.AcceptChanges();
}

BEARBEITEN Ich habe drei Felder als Primärschlüssel und rufe nur zwei Felder in der select-Anweisung auf. Ist es ein Grund fürDBConcurrency Error? Ich kann die Tabelle jedoch mit denselben Parametern (drei Felder als Primärschlüssel) in SQL Server 2005 aktualisieren.

AKTUALISIEREN

Ich habe die Lösung gefunden und die Lösung wurde erstellt und mit dem zweiten DataAdapter aktualisiert. Ich benutzte getAllData (NpgSqlDataAdapter) So füllen Sie die Tabelle als

NpgsqlDataAdapter getAllData = new NpgsqlDataAdapter("SELECT 
code,product, unitprice, quantity, InvoiceNo, Date FROM stocktable WHERE Code='" + product + "'
 ORDER BY EDate ASC", DatabaseConnectionpg);

Und Außerdem wird der nächste Adapter erstellt, der als @ aktualisiert werden sol

NpgsqlDataAdapter updateadap= new NpgsqlDataAdapter("SELECT sn, quantity FROM stocktable WHERE Code='" + product + "'
 ORDER BY EDate ASC", DatabaseConnectionpg);
NpgsqlCommandBuilder cb = new NpgsqlCommandBuilder(updateadap);
    //getAllData.RowUpdating += (sender2, e2) => { e2.Command.Parameters.Clear(); };
    //cb.SetAllValues = false;
    updateadap.DeleteCommand = cb.GetDeleteCommand();
    updateadap.InsertCommand = cb.GetInsertCommand();
    updateadap.UpdateCommand = cb.GetUpdateCommand();
    int x = updateadap.Update(ds1);
    if (x > 0)
    {
        ......
    }

Ich habe viel versucht und festgestellt, dass NpgsqlDataAdapter ein Problem mit Column @ haCod. Als ich es ablegte, funktionierte es. Der Datentyp des Spaltencodes ist varchar. Ich weiß nicht, warum das passiert ist. Hat jemand eine Ahnung davon?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage