2012-12-05 1 views
0

J'ai créé avec Visual Studio 2010 Express une base de données Sql Compact (fichier sdf), avec plusieurs tables et relations. À partir de cette base de données, j'ai généré un ensemble de données fortement typé.Mise à jour du jeu de données fortement typé à partir de la base de données Sql Compact locale

Maintenant, je veux remplir l'ensemble de données avec le contenu de la base de données. J'ai donc utilisé le code suivant pour me connecter à la base de données et remplir l'ensemble de données.

//My strongly typed dataset 
localData = new LokalStorageDataSet(); 

//SqlCe-Connection 
localConnection = new SqlCeConnection(@"Data Source=|DataDirectory|\TempStorage.sdf; Password='xyc';Persist Security Info=True"); 

localConnection.Open(); 
SqlCeCommand command = new SqlCeCommand("SELECT * FROM progstates", localConnection); 
localDataAdapter = new SqlCeDataAdapter(command); 

localDataAdapter.Fill(localData); 

Le problème est qu'il n'y a pas de lignes ont été ajoutées à mon jeu de données, bien que dans la base de données, il y a des lignes. Si j'utilise un SqlCeReader pour lire les résultats de l'SqlCeCommand, le lecteur retourne les lignes:

SqlCeDataReader dr = command.ExecuteReader(); 

     while (dr.Read()) 
     { 
      ... 
     } 

Pouvez-vous me donner la raison pour laquelle mon jeu de données ne reçoivent pas les lignes de la table dans l'ensemble de données?

EDIT: J'ai vu que dans mon jeu de données une nouvelle table de données ont été créés, appelés « Table » avec les mêmes colonnes comme celui que je demandé (progstate) mais aussi ce datatable a une rowCount de 0.

Répondre

1
EDITED ***** 

Try This :- 

//My strongly typed dataset 
localData = new LokalStorageDataSet(); 

//SqlCe-Connection 
localConnection = new SqlCeConnection(@"Data Source=|DataDirectory|\TempStorage.sdf; Password='xyc';Persist Security Info=True"); 


SqlCeCommand command = new SqlCeCommand("SELECT * FROM progstates", localConnection); 

localConnection.Open(); 

var dataReader = command.ExecuteReader(); 

localData.Load(dataReader,LoadOption.Upsert,localData.Tables[0]); 

localConnection.Close(); 

Ou Vous ne pouvez pas faire cela avec DataAdapter comme ceci: -

localDataAdapter = new SqlCeDataAdapter(); 

SqlCeCommand command = new SqlCeCommand("SELECT * FROM progstates", localConnection); 

localDataAdapter.SelectCommand = command; 

localConnection.Open(); 

localDataAdapter.SelectCommand.ExecuteNonQuery(); 
localDataAdapter.Fill(localData.Tables[0]); 

localConnection.Close(); 
+0

Hm cela fonctionne, merci! Mais pourquoi ne fonctionne-t-il pas avec un SqlCeDataAdapter? Je préférerais si je pouvais utiliser l'adaptateur. Je dois aussi l'utiliser lorsque j'écris les données de l'ensemble de données dans la base de données (avec dataAdapter.Update (dataset);). Malheureusement, cela ne fonctionne pas non plus. :( – Mossos

+0

Je mettrai à jour de cette façon trop prochainement – Derek

+0

Hm pouvez-vous décrire la méthode pour le faire, s'il vous plaît? Je ne trouve pas une méthode appropriée sur la classe de l'ensemble de données – Mossos

Questions connexes