[C#][ADO.Net] Problème génération requêtes du CommandBuilder

Résolu
Exekuter Messages postés 5 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 27 décembre 2007 - 21 déc. 2007 à 15:42
Exekuter Messages postés 5 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 27 décembre 2007 - 27 déc. 2007 à 11:16
Bonjour à tous,

Après avoir recherché vainement sur le net, je n'ai pas trouvé de solution à mon problème (solution probablement très simple).
Brève description de mon application : cela consiste à un export de tables Access vers une base MySQL. Rien de très compliqué en soi. Pour effectuer cet export, j'utilise un DataSet pour récupérer mes données Access, et je me sert de celui-ci pour injecter les données dans la table (vide) MySQL correspondante.

Je bloque au niveau de la mise à jour de la table MySQL. J'utilise un MySqlCommandBuilder (pour générer les UpdateCommand, InsertCommand et DeleteCommand) puis un DataAdapter.update pour mettre à jour ma table.
Mon problème est que lors de la création du MySqlCommandBuilder, celui-ci ne génère pas automatiquement les command de MàJ, et je ne comprends pas pourquoi. Les 3 command restent à null...

Mon code en question :
public void MiseAJourTable(DataSet ds, String nomTableMySql)
{
    try
    {
        //Création d'un objet MySqlCommand pour être utilisé dans le MySqlDataAdapter
        CreerCommand("SELECT * FROM " + nomTableMySql);               

        MySqlDataAdapter da = new MySqlDataAdapter(this.command);
       
        MySqlCommandBuilder cb = new MySqlCommandBuilder(da);
        //Après cette ligne, UpdateCommand, InsertCommand et DeleteCommand sont tous à 'null'...
       
        da.UpdateCommand = cb.GetUpdateCommand();
        da.InsertCommand = cb.GetInsertCommand();
        da.DeleteCommand = cb.GetDeleteCommand();
   
        da.Update(ds, "MaTableSourceAccess");
       
    }
    catch (Exception ee)
    {
        //Traitements spécifiques
    }
}

Merci d'avance.
Je continue mes recherches de mon côté...
A voir également:

7 réponses

Exekuter Messages postés 5 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 27 décembre 2007
27 déc. 2007 à 11:16
Salut,

Ceci en ajoutant un DataTableMapping (que j'avais oublié) pour faire la correspondance entre les colonnes sources et destinations, tout marche parfaitement. Merci !

Bonnes fêtes de fin d'année :-)
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
24 déc. 2007 à 14:40
salut

ta table mysql a-t-elle une clé primaire
sinon il faut en ajouter une

solution2 : il est possible de mettre les commandes à la main à la place de les générer par le commandbuilder

bon courage
0
Exekuter Messages postés 5 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 27 décembre 2007
26 déc. 2007 à 09:26
La table MySQL a bien une clef primaire.

Pour la solution 2, mettre les commandes à la main, j'y ai déjà pensé, mais mes tables contiennent plus de 300 000 enregistrements... :/
0
Exekuter Messages postés 5 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 27 décembre 2007
26 déc. 2007 à 10:42
Hum, j'avais mal compris l'histoire de mettre les commandes à la main, au temps pour moi...
Les commandes sensées être générées par le CommandBuilder ont une forme particulière (avec paramètres, etc.) ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
26 déc. 2007 à 12:00
Salut

Pas de forme particuliere c'est du SQL

La seule grosse difference c'est que le command builder genere des ordres SQL pessimistes
c'est a dire qu'ils sont sur tous les champs
cad where cle=cle and champ1 = val1 and ....
et non que sur la clé priamaire 

Bon courage
0
Exekuter Messages postés 5 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 27 décembre 2007
26 déc. 2007 à 13:36
Ce genre ce code correspondrait ?

da.InsertCommand = new MySqlCommand("INSERT INTO nomTableMySql ( `Id_Esa` , `N°` , `Code ESA` , `Taux` , `Partage` , `Poste budgétaire` , `N° de TE` ) VALUES ( ?id , ?n , ?code , ?tx , ?partage , ?poste , ?nt )", conn);
//Ajout des paramètres
da.InsertCommand.Parameters.Add("?id", MySqlDbType.Int32, 11, "`Id_Esa`");
da.InsertCommand.Parameters.Add("?n", MySqlDbType.Int32, 11, "`N°`");                
da.InsertCommand.Parameters.Add("?code", MySqlDbType.VarChar, 4, "`Code ESA`");
da.InsertCommand.Parameters.Add("?tx", MySqlDbType.Float, 11, "`Taux`");
da.InsertCommand.Parameters.Add("?partage", MySqlDbType.VarChar, 20, "`Partage`");
da.InsertCommand.Parameters.Add("?poste", MySqlDbType.VarChar, 10, "`Poste budgétaire`");
da.InsertCommand.Parameters.Add("?nt", MySqlDbType.VarChar, 10, "`N° de TE`");
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
26 déc. 2007 à 14:18
Oui,

Sauf qu'il faut enlever l'id si l'id est autogéneré.

C'est le code est ressemble à celui  généré par le commandbuilder
Car ca ne fonctionnera pas dans ce cas.

Je ne sais pas ou est le probleme.
Deplus, j'utilise jamais les commandbuilder dans mes programmes
pas assez personnalisables.
0
Rejoignez-nous