none
CommandDelete ne fonctionne pas RRS feed

  • Question

  • Bonjour,

    Je rencontre un probleme avec l'update d'une datatable, les ligne ajouter/modifier sont bien mise a jour, mais les ligne Delete ne sont pas executé.

    J'utilise une factory pour generer mon DataAdapter, la commande Delete Generer est

    DELETE FROM TBl_DONNE_Bulk WHERE ((ID = ?) AND ((? = 1 AND TEXT255_1 IS NULL) OR (TEXT255_1 = ?)) AND ((? = 1 AND TEXT255_2 IS NULL) OR (TEXT255_2 = ?)) AND ((? = 1 AND DATE_1 IS NULL) OR (DATE_1 = ?)) AND ((? = 1 AND ENTIERLONG_1 IS NULL) OR (ENTIERLONG_1 = ?)))
    

    De maniere general j'ai completement mapper dans une class l'ensemble des fonctionnalité pour le chargement/enregistrement,

    la fonction qui me créé mes command

        ''' <summary>
        ''' Permet la creation des commandes
        ''' </summary>
        ''' <param name="pOptions"></param>
        ''' <remarks></remarks>
        Private Sub CreateCommand(ByVal pOptions As Load_Parametre)
    
          Dim lComdBuilder As Object = Connexion.GetCommandBuilder(DataAdapter)
    
          ' lComdBuilder.QuotePrefix = Connexion.QuotePrefix ' QuotePrefix '"["
          'lComdBuilder.QuoteSuffix = Connexion.QuoteSuffix ' QuoteSuffix '"]"
    
    
    
          Try 'utiliser si jamais pas de colonne clef primaire, impossible de creer l'update
            If pOptions.SkipUPDATECommand = False Then
              DataAdapter.UpdateCommand = lComdBuilder.GetUpdateCommand
            End If
    
          Catch ex As Exception
            Throw New Exception("Impossible de créé la commande UPDATE", ex)
          End Try
    
          Try 'utiliser si jamais pas de colonne clef primaire, impossible de creer le delete
            If pOptions.SkipDELETECommand = False Then
              DataAdapter.DeleteCommand = lComdBuilder.GetDeleteCommand
            End If
    
          Catch ex As Exception
            Throw New Exception("Impossible de créé la commande DELETE", ex)
          End Try
    
          Try
            'utiliser si jamais pas de colonne clef primaire, impossible de creer le delete
            If pOptions.SkipINSERTCommand = False Then
              DataAdapter.InsertCommand = lComdBuilder.GetInsertCommand
            End If
    
          Catch ex As Exception
            Throw New Exception("Impossible de créé la commande INSERT", ex)
          End Try
    
          CreateCommandRuned = True
    
        End Sub
    
    

    La fonction qui Update

        ''' <summary>
        ''' Execute la mise a jour native dotnet " DataAdapter.Update(DataSet)"
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub Update()
    
          'on execute le create commande a l'update, cela permet par exemple de charger une table sans primary key,
          'si on ne fai pas d'update, pas besoin de ce soucier d'ignorer les creates commande
    
          'si le create commande a déja ete executé on ne l'execute pas.
          If CreateCommandRuned = False Then
    
            CreateCommand(LoadOptions)
    
          End If
    
          If Connexion.Logs.LogDelete Then
    
            Try
    
              For Each lRow As DataRow In Table.GetChanges(DataRowState.Deleted).Rows
    
                Connexion.LogAddFromDataTable(lRow)
    
              Next
    
            Catch ex As Exception
    
            End Try
    
          End If
    
          If Connexion.Logs.LogInsert Then
    
            Try
    
              For Each lRow As DataRow In Table.GetChanges(DataRowState.Added).Rows
    
                Connexion.LogAddFromDataTable(lRow)
    
              Next
    
            Catch ex As Exception
    
            End Try
    
          End If
    
          If Connexion.Logs.LogUpdate Then
    
            Try
    
              For Each lRow As DataRow In Table.GetChanges(DataRowState.Modified).Rows
    
                Connexion.LogAddFromDataTable(lRow)
    
              Next
    
            Catch ex As Exception
    
            End Try
    
    
          End If
    
          
          'Dim lOledbDataAdapter As System.Data.OleDb.OleDbDataAdapter
    
          'lOledbDataAdapter = DataAdapter
    
          'Dim lNb As Integer = lOledbDataAdapter.Update(Table)
    
          DataAdapter.Update(DataSet)
    
          
        End Sub
    

    Pour information je ne rentre pas dans les fonction de Log,

    J'ai essayer de retiper le dataadpater en Oledb, mais j'ai le meme probleme ...

    Est ce que qq voie de quoi cela peu venir ?

    Cordialement

    Sébastien

     


    Cordialement Sébastien DataBase2Code
    mardi 28 septembre 2010 10:33

Réponses

  • Bonjour,

    J'ai trouver d'ou venais le probleme, je fesais un Table.RemoveAt() de l'index plutot que Table.rows(index).Delete , ...

    Forcement en lui supprimant la ligne de la table qui doit etre supprimer ... l'adapter ne pouvais pas executer la command ...

    Merci quand meme a ce qui ce sont panché sur mon probleme.

    Cordialement

    Sébastien

     


    Cordialement Sébastien DataBase2Code
    • Marqué comme réponse Aserf mardi 28 septembre 2010 13:08
    mardi 28 septembre 2010 13:08

Toutes les réponses

  • Petite information complementaire,

    j'ai essayer en oledbconnection et sqlconnection meme probleme

    Cordialement

    Sébastien

     


    Cordialement Sébastien DataBase2Code
    mardi 28 septembre 2010 12:05
  • La commande text pour SqlCommand est

    DELETE FROM [TBl_DONNE_Bulk] WHERE (([ID] = @p1) AND ((@p2 = 1 AND [TEXT255_1] IS NULL) OR ([TEXT255_1] = @p3)) AND ((@p4 = 1 AND [TEXT255_2] IS NULL) OR ([TEXT255_2] = @p5)) AND ((@p6 = 1 AND [DATE_1] IS NULL) OR ([DATE_1] = @p7)) AND ((@p8 = 1 AND [ENTIERLONG_1] IS NULL) OR ([ENTIERLONG_1] = @p9)))
    

    Cordialement

    Sébastien


    Cordialement Sébastien DataBase2Code
    mardi 28 septembre 2010 12:19
  • Bonjour,

    J'ai trouver d'ou venais le probleme, je fesais un Table.RemoveAt() de l'index plutot que Table.rows(index).Delete , ...

    Forcement en lui supprimant la ligne de la table qui doit etre supprimer ... l'adapter ne pouvais pas executer la command ...

    Merci quand meme a ce qui ce sont panché sur mon probleme.

    Cordialement

    Sébastien

     


    Cordialement Sébastien DataBase2Code
    • Marqué comme réponse Aserf mardi 28 septembre 2010 13:08
    mardi 28 septembre 2010 13:08