ADO.Net Updated nicht immer alle rows einer Tabelle



  • Hallo,

    ich habe ein Programm, melches über C# ADO.Net Änderungen in einer Tabelle macht.
    Dabei werden ein paar Rows upgedated und eine Row gelöscht. Das Updaten und Löschen erfolgt als Transaction. Ab und zu (in ca 20% der Fälle) werden nicht alle Zeilen der Tabelle geändert. Immer eine Zeile wird dabei nicht geändert (immer die Letzte?). Die anderen Zeilen allerdings schon, auch das Löschen der Zeile klappt immer.

    Ablauf:

    1.Änderungen in DataRow der Tabelle vornehmen. Ich prüfen ob die Daten korrekt sind und auch row.RowState ist korrekt (Modified oder Deleted)

    SqlTransaction transaction = Database.BeginTransaction();
    SqlDataAdapter adapter = new SqlDataAdapter("", Database);
    
    adapter.DeleteCommand = CreateDeleteArticleAttatchmentCommand(transaction);
    adapter.InsertCommand = CreateInsertArticleAttatchmentCommand(transaction);
    adapter.UpdateCommand = CreateUpdateArticleAttatchmentCommand(transaction);
    
    //Anmeldung an RowUpdating und RowUpdated() um zu prüfen ob die erzeugten SQL Befehle korrekt sind
    //Die Befehle sind korrekt und für jeden Zeile ist ein Update Statement vorhanden.
    //Die erzeugten Update Statements wurde im Management Studio getestet
    adapter.RowUpdating += new SqlRowUpdatingEventHandler(OnRowUpdating);
    adapter.RowUpdated += new SqlRowUpdatedEventHandler(OnRowUpdated);
    
    adapter.Update(article.Attatchments.Dataset);
    
    transaction.Commit();
    

    UpdateCommand:

    private SqlCommand CreateUpdateArticleAttatchmentCommand(SqlTransaction transaction)
        {
          SqlCommand command = Database.CreateCommand();
          command.Transaction = transaction;
          command.CommandText = "UPDATE ArtikelAnhang SET " +
                                  "ASA_AS_ID = @ID" +
                                  ",ASA_Index = @INDEX" +
                                  ",ASA_Kommentar = @KOMMENTAR" +
                                  ",ASA_Datei = @DATEI " +
                                  "WHERE ASA_AS_ID = @ID AND ASA_ID = @KSAID";
    
          command.Parameters.Add("@KSAID", SqlDbType.Int, 4, "ASA_ID");
          command.Parameters.Add("@ID", SqlDbType.Int, 4, "ASA_AS_ID");
          command.Parameters.Add("@INDEX", SqlDbType.Int, 4, "ASA_Index");
          command.Parameters.Add("@KOMMENTAR", SqlDbType.NVarChar, Int32.MaxValue, "ASA_Kommentar");
          command.Parameters.Add("@DATEI", SqlDbType.NVarChar, Int32.MaxValue, "ASA_Datei");
    
          return command;
        }
    

    Update Command als Query zum Testen welches von RowUpdating geniert wurde. Query lässt sich ohne Fehler ausführen und erzeugt auch gewünschte Änderungen:

    declare @KSAID int
    declare @ID int
    declare @INDEX int
    declare @KOMMENTAR nvarchar(max)
    declare @DATEI nvarchar(max)
    
    set @KSAID = 31112
    set @ID = 25350
    set @INDEX = 2
    set @KOMMENTAR = 'Kommentar'
    set @DATEI = 'C:\temp\Anhang\5.txt'
    
    UPDATE ArtikelAnhang SET ASA_AS_ID = @ID,ASA_Index = @INDEX,ASA_Kommentar = @KOMMENTAR,ASA_Datei = @DATEI WHERE ASA_AS_ID = @ID AND ASA_ID = @KSAID
    

    Das heisst obwohl von den RowUpdating alle erzeugten Queries korrekt sind werden nicht immer alle Queries auf der Tabelle ausgeführt. Ab wird schlicht ein Updatebefehl nicht ausgeführt.

    Ich hoffe jemand hat eine Idee an was es liegen könnte.

    Danke Jochen


Log in to reply