RemoteDataAccess C# Pull()

Résolu/Fermé
Signaler
Messages postés
22
Date d'inscription
mercredi 10 janvier 2007
Statut
Membre
Dernière intervention
11 août 2009
-
Messages postés
22
Date d'inscription
mercredi 10 janvier 2007
Statut
Membre
Dernière intervention
11 août 2009
-
Bonjour,
J'ai mis en place une architecture RDA avec sql server 2005 et sql server ce (avec IIS bien sur)
Donc tout est en place et les fonctions Pull(), Push() et SubmitSql() marchent tres bien.
Par contre, d'apres la doc avant de refaire un pull, il faut supprimer la table que l'on veut importer du pocket pc.
Donc
j'ai mis cela en place dans mon code, mais lorsque je lance une
deuxieme fois mon code, la suppression de la table marche tres bien mais
une erreur est generee lors de l'execution du Pull(), dont voici le
message :

Message : [MyErrorLog]
Source : Microsoft SQL Server 2005 Mobile Edition
Native : 28753
HResult : -2147467259

Voila les bouts de code utilises :

if (!System.IO.File.Exists("\\My Documents\\Test.sdf"))
                {
                    engine = new System.Data.SqlServerCe.SqlCeEngine(connectionLocale);
                    engine.CreateDatabase();
                    engine.Dispose(); 
                }
                else
                {
                        cnx = new System.Data.SqlServerCe.SqlCeConnection(connectionLocale);
                        cnx.Open();
                        System.Data.SqlServerCe.SqlCeCommand cmd = cnx.CreateCommand();
                        cmd.CommandText = "DROP TABLE Personne";
                        cmd.ExecuteNonQuery();

                 if (cnx.State != ConnectionState.Closed) cnx.Close();

                }

rda.Pull("Personne", sqlCmd, connectionDistante, RdaTrackOption.TrackingOnWithIndexes, "MyErrorLog");

Donc une erreure sera liee a ma table d'erreur.
Ma premiere interrogation porte sur la presence de cette table :
"Si une erreur se produit lorsque l'application appelle la méthode Push , SQL Server Compact Edition crée la table d'erreurs et y ajoute un enregistrement" (source : http://msdn2.microsoft.com/fr-fr/library/ms174551.aspx)
Si je comprend bien cette phrase, la table "MyErrorLog" est cree si une erreur survient lors d'un Push(), donc pourquoi est elle cree lors du Pull() ? (j'ai peut etre mal compris)

Ensuite j'ai essaye de ne pas mettre le parametre MyErrorLog dans la fonction Pull(), mais cette fois ci lors de la seconde execution du programme c'est une table sysTrackedObject qui pose probleme ( Une des 4 tables creees automatiquement lors du Pull).
Donc d'apres mes docs et ma logique il faudrait qu'en plus de la table a Pull, supprimer les 4 tables sys ainsi que la table d'erreur.
J'ai de ce fait rajouter 5 drop table dans le "else" mais je n'ai pas le droit de supprimer ces tables ...
Donc leur presence  bloque tous les Pull a partir de la deuxieme execution et on ne peut les supprimer ....
Et malheureusement pour mon appli je ne peux me passer du TrackingOn du Pull qui creer ces tables ...
J'ai deja beaucoup cherche et ma structure de code correspond trait pour trait a tous les exemples, tutos que j'ai trouve ...

Je suis prenneur de toute idee =)

++

2 réponses

Messages postés
22
Date d'inscription
mercredi 10 janvier 2007
Statut
Membre
Dernière intervention
11 août 2009

Bon apres moult recherche dans les entrailles de tous mes composants l'erreur est identifiee ....

Il suffit de deployer l'application dans le repertoire Windows du pocket la ou se trouve l'agent sql et tout est regle ...

++
Messages postés
22
Date d'inscription
mercredi 10 janvier 2007
Statut
Membre
Dernière intervention
11 août 2009

Apparement le probleme viendrais des tables sys creees avec trackingonwithindexes.
Dans la table __sysTrackedObject il reste des traces de la table Personne qui est droppee a la deuxieme execution, donc d'apres ce que je pense, lorsque l'appli veut pull elle check cette table sys et voit un enregistrement du nom de la table et croit qu'elle n'est pas droppee donc genere une erreur.

Si quelqu'un voit ce que j'ai oublie pour effacer ces lignes de la table sys en meme temps que la table ...

++