Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3784 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  DataAdapter avec deux BD.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

DataAdapter avec deux BD.

n°1561957
Lemminkain​en
Chantre de la lyre
Posté le 18-05-2007 à 11:58:16  profilanswer
 

Bonjour,
J'ai un petit problème avec des bases de données CE. J'aimerai à partir d'une base de donnée 1, remplir une base de donnée 2. (Qui contient les mêmes tables que la base de donnée 1, mais ces tables sont vides.)  
 
J'ai essayé les requêtes qui permettent de faire ce genre de chose (Serveur.Base.dbo.tables...) mais apparemment en mobile cela ne fonctionne pas. J'ai donc tenté cette méthode :
1) Récupérer dans un dataset les informations et le schéma d'une table de la BD1
2) Récupérer dans un autre dataset le schéma de la même table mais de la BD2
3) Je fusionne les deux Dataset
4) J'update avec le DataAdapter de la BD2 le nouveau dataset.  
 
Mais cela ne fonctionne pas, je ne vois pas où pourrait se situer l'erreur, sachant que j'ai bien initialisé le SqlceBuilder.
 
 
Merci, :jap:
 

Code :
  1. '_______________________________________________________
  2.         ' Déclaration Variables connections BD2 => PDA
  3.         '_______________________________________________________
  4.         Dim cnx_BasePDA As SqlCeConnection
  5.         Dim obj_command_BasePDa As SqlCeCommand
  6.         cnx_BasePDA = New SqlCeConnection
  7.         cnx_BasePDA.ConnectionString = ("Data Source = C:\BDPDA\ODYSSEE.sdf" )
  8.         '_______________________________________________________
  9.         ' Déclaration Variables connections BD1
  10.         '_______________________________________________________
  11.         Dim cnx As SqlCeConnection
  12.         Dim obj_command As SqlCeCommand
  13.         cnx = New SqlCeConnection
  14.         cnx.ConnectionString = ("Data Source = " & My.Settings.TextBD & "" )
  15.         cnx.Open()
  16.         Dim DS_BD1 As DataSet
  17.         Dim DS_BD2 As DataSet
  18.         Dim DA_BD1 As SqlCeDataAdapter
  19.         Dim DA_BD2 As SqlCeDataAdapter
  20.         obj_command = New SqlCeCommand
  21.         obj_command.Connection = cnx
  22.         obj_command.CommandText = "Select * From Modules"
  23.         DS_BD1 = New DataSet
  24.         DA_BD1 = New SqlCeDataAdapter(obj_command.CommandText, cnx)
  25.         DA_BD1.FillSchema(DS_BD1, SchemaType.Mapped, "Modules" )
  26.         DA_BD1.Fill(DS_BD1, "Modules" )
  27.         cnx_BasePDA.open()
  28.         obj_command_BasePDA = New SqlCeCommand
  29.         obj_command_BasePDA.Connection = cnx_BasePDA
  30.         obj_command_BasePDA.CommandText = "Select * From Modules"
  31.         DS_BD2 = New DataSet
  32.         DA_BD2 = New SqlCeDataAdapter(obj_command_BasePDA.CommandText, cnx_BasePDA)
  33.         DA_BD2.FillSchema(DS_BD2, SchemaType.Mapped, "Modules" )
  34.         Dim builder As SqlServerCe.SqlCeCommandBuilder
  35.         builder = New SqlServerCe.SqlCeCommandBuilder(DA_BD2)
  36.         DA_BD2.UpdateCommand = builder.GetUpdateCommand
  37.         DA_BD2.InsertCommand = builder.GetInsertCommand
  38.         DA_BD2.DeleteCommand = builder.GetDeleteCommand
  39.         cnx.Close()
  40.         DS_BD2.Merge(DS_BD1, True, MissingSchemaAction.Ignore)
  41.         DA_BD2.Update(DS_BD2, "Modules" )
  42.         cnx_BasePDA.Close()


Message édité par Lemminkainen le 18-05-2007 à 14:12:28

---------------
Que vois-tu quand tu fermes les yeux ?
mood
Publicité
Posté le 18-05-2007 à 11:58:16  profilanswer
 

n°1562051
MagicBuzz
Posté le 18-05-2007 à 14:25:47  profilanswer
 

Au lieu de faire un Merge, essaie de faire Insert des lignes du DS source.
 
Vu que c'est pas la même base, il y a des chances pour que le Merge échoue à cause de ça, tout comme c'est impossible de jouer avec des Nodes XML provement de deux XmlDocuments différents.
 
D'un autre côté, tu risques d'avoir le même problème avec Insert... Il ne te restera alors plus que la solution de copier les données "à la main"... (en je bossant plus avec les objets "row", mais les valeurs qui sont dedans)

n°1562055
Lemminkain​en
Chantre de la lyre
Posté le 18-05-2007 à 14:28:53  profilanswer
 

Au niveau du merge, cela fonctionne bien. :/
 
Après le merge, j'ai essayé de voire ce qu'il y avait dans le dataset fusionné, et les données étaient bien présentes.
 
Mais je vais essayer avec l'INSERT, et puis sinon, lignes par lignes... :/


Message édité par Lemminkainen le 18-05-2007 à 14:30:23

---------------
Que vois-tu quand tu fermes les yeux ?
n°1562056
MagicBuzz
Posté le 18-05-2007 à 14:32:50  profilanswer
 

Ah, ok, si le merge marche, c'est un bon début.
 
Sinon, effectivement, je sais que je m'étais heurté à un souci avec le Update()
 
Je ne me souviens plus comment je l'avais résolu, et j'ai pas accès à mes sources là... :/

n°1562060
Lemminkain​en
Chantre de la lyre
Posté le 18-05-2007 à 14:37:56  profilanswer
 

Ce qui est étrange c'est qu'il n'y a aucuns messages d'erreurs. Les données ne se copient tout simplement pas.
 
Merci quand même. :jap:


Message édité par Lemminkainen le 18-05-2007 à 14:38:15

---------------
Que vois-tu quand tu fermes les yeux ?
n°1562061
MagicBuzz
Posté le 18-05-2007 à 14:39:09  profilanswer
 

Relou...
 
Je trouve que ce topic :
http://forum.hardware.fr/hfr/Progr [...] 3525_1.htm
 
Mais je suis sûr qu'il y a un autre topic dans lequel j'avais fait une copie complète de mon code... Avec le module d'enregistrement :sweat:
 
Fait une recherche sur "http://magicsite.manga-torii.com" sur le forum, t'aura peut-être plus de chance que moi :spamafote:
 
ps : pas la peine de tenter d'ouvrir l'url, mon serveur est down depuis un mois, ma consommation d'électricité avoisine celle de la SNCF, faut que je me calme avec les serveurs allumés plein l'appart :D

n°1562063
Lemminkain​en
Chantre de la lyre
Posté le 18-05-2007 à 14:40:42  profilanswer
 

Merci je vais essayer. :o


---------------
Que vois-tu quand tu fermes les yeux ?
n°1562065
MagicBuzz
Posté le 18-05-2007 à 14:44:44  profilanswer
 

ouais, j'ai tout cherché, je trouve désespérément rien.
 
au mieux, des bouts de code d'un projet dérivé, mais qui fait de la lecture seule :/

n°1562066
MagicBuzz
Posté le 18-05-2007 à 14:48:16  profilanswer
 

ah, ça me reviens.
 
après ton FillSchema, fais un Fill (même si la table est vide, ça dit au DS qu'il est correctement lié aux données de ton DA), puis à nouveau un FillSchema
 
(ne me demande pas pourquoi, me souvient plus de l'explication, mais c'est le seul moyen que j'avais trouvé pour faire marcher le truc avant de trouver une solution plus propre)


Message édité par MagicBuzz le 18-05-2007 à 14:49:02
n°1562086
Lemminkain​en
Chantre de la lyre
Posté le 18-05-2007 à 15:08:57  profilanswer
 

Je fais donc un :
 

Code :
  1. DA_BD2.FillSchema(DS_BD2, SchemaType.Mapped, "Modules" )
  2.         DA_DS_BD2.Fill(DS_BD2, "Modules" )
  3.         DA_BD2.FillSchema(DS_BD2, SchemaType.Mapped, "Modules" )



---------------
Que vois-tu quand tu fermes les yeux ?
mood
Publicité
Posté le 18-05-2007 à 15:08:57  profilanswer
 

n°1562089
Lemminkain​en
Chantre de la lyre
Posté le 18-05-2007 à 15:13:06  profilanswer
 

Lemminkainen a écrit :

Je fais donc un :
 

Code :
  1. DA_BD2.FillSchema(DS_BD2, SchemaType.Mapped, "Modules" )
  2.         DA_DS_BD2.Fill(DS_BD2, "Modules" )
  3.         DA_BD2.FillSchema(DS_BD2, SchemaType.Mapped, "Modules" )



 
Pas mieux de succés. :o


---------------
Que vois-tu quand tu fermes les yeux ?
n°1562114
MagicBuzz
Posté le 18-05-2007 à 16:03:54  profilanswer
 

mardoum :sweat:
 
ben je sais pas :/

n°1562118
Lemminkain​en
Chantre de la lyre
Posté le 18-05-2007 à 16:09:41  profilanswer
 

Je viens de retester le Merge, et ça marche niquel.  
 
Le dataset de la BD2 prend bien les infos du dataset de la BD1. C'est uniquement l'update qui merde. :o C'est rageant. :o


---------------
Que vois-tu quand tu fermes les yeux ?
n°1562120
MagicBuzz
Posté le 18-05-2007 à 16:13:37  profilanswer
 

Ben oui oui oui, si le DS se rempli bien, c'est que ça marche.
 
Y'a pas un "Save" ou "CommitChanges" ou un truc du genre ?

n°1562124
Lemminkain​en
Chantre de la lyre
Posté le 18-05-2007 à 16:23:00  profilanswer
 

Si je ne fais pas d'erreur, la fonction update va faire une comparaison et verifier si des lignes ont été ajouté,supprimé,... Et selon, va faire l'instruction necessaire.
 
Je viens de faire un test après le merge :
 

Code :
  1. MsgBox(DS_BD2.HasChanges())


 
Et il me répond False. :/ Ca ne pourrait pas venir de là ?


Message édité par Lemminkainen le 18-05-2007 à 16:31:30

---------------
Que vois-tu quand tu fermes les yeux ?
n°1562146
MagicBuzz
Posté le 18-05-2007 à 17:32:21  profilanswer
 

Ha ben si y'a des chances :D

n°1562151
Lemminkain​en
Chantre de la lyre
Posté le 18-05-2007 à 17:40:55  profilanswer
 

Si je rajoute une ligne à la fin, ça devrait marcher non, en théorie ? :o


---------------
Que vois-tu quand tu fermes les yeux ?
n°1562159
MagicBuzz
Posté le 18-05-2007 à 17:51:23  profilanswer
 

Aucune idée.
J'ai plutôt l'impression que les lignes ramenées avec Merge ne sont pas comptabilisées comme ajoutée ou modifiées.
 
Si j'étais toi, je m'orienterais directement vers Insert() d'autant qu'il me semble que tu peux lui passer une collection de rows non ?
 
=> DS_DB2.Insert(DS_DB1.Rows);
 
Si ça marche, ça te fait pas de changement fondamental, et ça devrait résoudre ton problème ;)

n°1562162
Lemminkain​en
Chantre de la lyre
Posté le 18-05-2007 à 17:55:47  profilanswer
 

MagicBuzz a écrit :

Aucune idée.
J'ai plutôt l'impression que les lignes ramenées avec Merge ne sont pas comptabilisées comme ajoutée ou modifiées.
 
Si j'étais toi, je m'orienterais directement vers Insert() d'autant qu'il me semble que tu peux lui passer une collection de rows non ?
 
=> DS_DB2.Insert(DS_DB1.Rows);
 
Si ça marche, ça te fait pas de changement fondamental, et ça devrait résoudre ton problème ;)


Oui je vais essayer.
 
Merci beaucoups pour ton aide.  :jap:


---------------
Que vois-tu quand tu fermes les yeux ?
n°1562779
Lemminkain​en
Chantre de la lyre
Posté le 21-05-2007 à 09:45:50  profilanswer
 

Bon, je n'ai pas trouvé d'option avec l'insert. Je vais donc remplir le DS1 avec les informations que je veux, et pour chaque table je ferais un insert.


---------------
Que vois-tu quand tu fermes les yeux ?

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  DataAdapter avec deux BD.

 

Sujets relatifs
[.NET] DataTable ou DataAdapter et update/insert -goto en C# oo-[C#] DataAdapter.Update() marche pô
[C#] Utilisation correct de UpdateCommand [DataAdapter] 
Plus de sujets relatifs à : DataAdapter avec deux BD.


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)