2010-04-22 2 views
0

J'ai la possibilité de choisir entre le stockage de données local (fichier xml) ou SQL Server. J'ai déjà créé il y a longtemps un ensemble de données typé pour mon application pour enregistrer des données locales dans le fichier xml.C# Adaptateur de données SQL Remplissage d'un jeu de données typé existant

Maintenant, j'ai un bool qui change entre la version basée sur le serveur et la version locale. Si vrai mon application obtient les données à partir du SQL Server.

Je ne suis pas sûr, mais il semble que la méthode de remplissage de Sql adaptateur ne peut pas remplir les données dans mon schéma existant

SqlCommand cmd = new SqlCommand("Select * FROM dbo.Categories WHERE CatUserId = 1", _connection); 
       cmd.CommandType = CommandType.Text; 

       _sqlAdapter = new SqlDataAdapter(cmd); 
       _sqlAdapter.TableMappings.Add("Categories", "dbo.Categories"); 
       _sqlAdapter.Fill(Program.Dataset); 

Cela devrait remplir mes données de dbo.Categories aux catégories (dans mon local, jeu de données typé). mais ce n'est pas le cas. Il crée une nouvelle table avec le nom "Table". Il semble qu'il ne peut pas gérer le schéma existant.

Je n'arrive pas à comprendre. Où est le problème?

btw. bien sûr, la demande de base de données que je fais n'est pas très utile de cette façon. C'est juste une version simplifiée pour tester ...

Répondre

1

La surcharge Remplissage que vous utilisez en passant dans un DataSet crée toujours un nouveau DataTable dans le DataSet fourni avec le nom "Table" (MSDN).

Donc, je pense que vous devez soit changer votre TableMapping à:

_sqlAdapter.TableMappings.Add("Table", "Categories"); 

(MSDN) en supposant que votre nom DataTable est "Catégories". Ou, n'utilisez pas TableMappings et fournissez juste le deuxième argument - le nom du DataTable dans ce DataSet que vous voulez remplir (MSDN). L'approche que j'utilise habituellement consiste à passer le DataTable lui-même que vous voulez remplir, au lieu du DataSet (MSDN).

+0

Le problème est, j'ai déjà un schéma de données existant. Mais les tables ont d'autres noms que les tables de la base de données sql. J'ai donc essayé de faire en sorte que la base de données sql de TableMapping corresponde au schéma du jeu de données local. Ne me demandez pas, pourquoi c'est comme ça. Mais je pense qu'il devrait y avoir un travail autour au lieu de renommer les tables sur le serveur. –

+0

@Rene - Je ne suggérais pas que vous deviez renommer les tables. Avez-vous vérifié le 2ème lien dans ma réponse? Peu importe que les noms de table dans la base de données SQL aient des noms différents pour les DataTables dans votre DataSet. Voir la figure 1 dans le 2ème lien que j'ai donné – AdaTheDev

+0

Ah, ok, désolé, votre droite. Je dois tester ça. 3èmes liens sympas. J'espère que cela fonctionne également avec les noms de colonnes. C'est une solution de contournement, mais cela ne résout pas le problème que j'ai avec l'utilisation de TableMapping. Mais c'est une solution. Je vais essayer ça. –

0

Essayez _sqlAdapter.TableMappings.Add("Table", "Categories");, mais si je me souviens bien, vous devrez également ajouter une correspondance de colonnes. BTW, vous pouvez essayer de créer dataadapter typé, c'est chose inutile, mais vous pouvez prendre la cartographie à partir de là.

+0

J'ai aussi des ColumnMappings mais ça ne marche pas mieux de cette façon. C'est juste étrange. Peu importe de quelle façon je définis les paramètres d'ajout de TableMappings. Tout le temps, je récupère "Table" au lieu du nom de TableMapping. –

Questions connexes