Synchroniser tables de deux bases de données en VB.NET - C#/.NET managed - Programmation
Marsh Posté le 01-10-2007 à 17:47:00
Le plus simple, c'est de passer par les outils de réplication de SQL Server directement. SQL Server Express contient tout ce qu'il faut pour ça.
Autre solution, vider ta table locale, charger la table distante dans une DataTable, puis recopier les lignes de ce datatable dans un autre qui provient d'un select sur la base locale. Un simple dt.Update() permettera de remplir la base locale. Attention cependant, c'est lent comme méthode, et applicable uniquement si le volume des données n'est pas trop important.
Encore une solution... Un drop de ta table locale, puis un create as select à partir d'une requête réportée (serveur lié par exemple)
Marsh Posté le 01-10-2007 à 17:51:36
Merci pour ta réponse qui ouvre plusieurs solutions.
Pour ce qui est de la première, en effet, je me suis informé sur la réplication, mais il semblerai que celle-ci ne soit possible avec l'Edition Express de SQL Server (en effet, toute les versions sont Express, même sur le serveur).
Pour la deuxième, c'été la seule idée que j'avais, avec prés de 500 enregistrements sur environs une dizaine de tables, j'ai peur de la lenteur de la synchronisation.
En revanche, ta dernière solution m'intéresse (par élimination), mais je ne vois pas trés bien ce que tu veux dire par la...
Peux- tu développer ?
Merci encore.
Marsh Posté le 01-10-2007 à 17:55:51
ofnipus a écrit : Merci pour ta réponse qui ouvre plusieurs solutions. |
500 Enreg par table c'est "Minuscule"
Marsh Posté le 01-10-2007 à 18:00:06
Vive les SGBR alors !!!!! Chouette !!!!
Jvais faire ca.
Derniére question ...
Existe t'il une solution "générique" pour permettre à un programme client d'accés à un SQL Server en mode HORS CONNEXION ? (les commerciaux chez les clients, sans accés internet).
Merci encore !
Marsh Posté le 01-10-2007 à 18:02:45
ofnipus a écrit : Vive les SGBR alors !!!!! Chouette !!!! |
Un SQL Server en local sur le pc portable
Marsh Posté le 01-10-2007 à 18:20:14
Avec une réplication sur le serveur principal ... OK
Mais ... ca demande d'avoir une version non-gratuite de SQL Server, ce que l'entreprise dans laquelle je suis en stage ne peut pas se permettre, tant pis. Merci encore pour toute ces info !!
Marsh Posté le 04-10-2007 à 11:10:01
Me revoilà, toujours pour le même problème...
Rappel : les enregistrements ajoutés en mode "hors connexion" sont ajouté dans la base locale du client, avec un ID contenant le 'CODE UTILISATEUR' : « ID_USERxxxxx »
Pour effectuer une synchronisation, j’ai découpé les taches en 2 étapes, et j’ai écrit les requêtes SQL pour ce faire :
1/ Mettre à jour la table de la base SERVER
Code :
|
2/ Mettre à jour la table de la base LOCAL
Code :
|
Je ne vois pas comment faire pour faire exécuter ces requêtes sans erreurs, merci de votre aide.
Marsh Posté le 04-10-2007 à 11:11:22
plutôt qu'un drop, utilise un truncate, ça évite de devoir recréer la table.
sinon, c'est quoi tes erreurs ?
Marsh Posté le 04-10-2007 à 11:18:11
Je ne sais pas où et comment exécuter cette requête.
Je suis partis du principe que la synchronisation été un programme à lui seul (programme que je réimplanterai après dans mon soft sous forme de procédure SUB SynchroBase).
J'ai écrit les requêtes, mais que mettre dans ma procédure pour l'exécution correcte de celle-ci ?
PS: éxécuter une requête sur une base, je m'en sort, mais une sur 2 bases en même temps, c'est la ou est le malaise :s
Merci pour votre aide !
Marsh Posté le 04-10-2007 à 11:51:28
Pour recardrer mon probléme, le voici en une phrase :
"Comment, en VB.net, exécuter une requête sur 2 tables de 2 bases de données de 2 serveurs SQL Server 2005 différentes ?"
Table_server = Server (SQL Server 2005EX) >> maBase >> maTable
Table_local = myHost (SQL Server 2005EX) >> maBase >> maTable
Merci !
Marsh Posté le 04-10-2007 à 12:21:23
Et n'oublie pas de regarder les articles anexes :
|
Marsh Posté le 04-10-2007 à 12:22:56
AAA ...
Tout ca ne serai pas en rapport avec la troisiéme solution que tu ma proposé ... ?
(Serveur lié ...)
Marsh Posté le 04-10-2007 à 18:32:37
Ca y est, je suis content, j'ai bien avancé ...
J’ai ajouté un SERVER LIE dans ma base de données locale
Code :
|
, puis j’ai créé une procédure de synchronisation (maj_data).
Code :
|
Le soft client travaille maintenant sur sa base locale. Pour synchroniser, il n’y a plus qu’a faire appel à la procédure maj_data de l’extérieur (à partir du soft client en VB.net)
Code :
|
PB : il me met «procédure introuvable »… pourtant, dans Management Studio, quand je fait appel à cette procédure dans une requête, tout passe bien !
Marsh Posté le 04-10-2007 à 19:15:13
A quelques erreurs de syntaxes près -y'a pas d'intellisense sur le forum - (et en C#, mais c'est quasi la même syntaxe comme tu peux voir, puisque ce sont les mêmes objets) :
Code :
|
Marsh Posté le 04-10-2007 à 20:08:40
YOUPI !!!
Ca marche !! Merci INIFINIMENT pour ton aide !!
Voici le code VB.net pour ceux que ca pourrait intérresser :
Code :
|
End Try
Merci pour tous, a bientôt !!
Marsh Posté le 15-10-2007 à 14:54:54
Attention : Faute de ne pas avoir suivit le consseil de Magic Buzz concernant le DROP > TRUNCATE, ma procédure de mise à jours s'effectuer bien, mais occasionnent la destruction des tables (DROP), il s'en trouvai par la suite que les relations et les clé primaires et étrangére sont supprimer.
En effet, il me fallait bien utiliser un TRUNCATE pour conserver la structure des tables, et donc leur relation.
Ceci ma occasionné quelques cheveux en moins avant de pouvoir trouver pourquoi tout le programme planter suite à une synchro !
Marsh Posté le 01-10-2007 à 14:30:02
Bonjour à tous !
Je développe actuellement un programme en VB.net avec Visual Studio.
La couche d’accès aux données réside en un server Microsoft SQL Server 2005.
Les clients traitent les informations de la base de données du serveur.
Seulement, certains clients seront amenés à utiliser le programme à l’extérieur (les commerciaux).
Pour leurs permettre l’accès (en lecture seulement) à la base de données, une copie des tables à été effectuée sur une base local (SQL Serveur 2005 Edition Express).
Mon problème, est que si la base de donnée distante (du serveur) est mise à jours (nouveau clients, nouveaux devis, etc.), l’utilisateur doit pouvoir mettre à jour sa base de donnée locale via une fonction de synchronisation : « Synchroniser ma base locale avec la base de donnée du serveur ».
Seulement, je ne sais pas comment programmer cette fonction.
Voici le prototype que pourrais être cette fonction, mais comment la programmer …
Sub SynchroniserBase(byval serveur_distant as string, byval serveur_local as string)
.
End Sub
(Dans l’accès aux données, j’ai su utiliser l’objet SQLConnection pour charger mon DataSet pour les traitements)
Qu’elle démarche à suivre pour une synchronisation ?
Merci par avance pour votre aide !
Message édité par ofnipus le 05-10-2007 à 11:29:06