2010-11-29 9 views
2

J'ai initialisés un dataAdapter:Supprimer la ligne par DataAdapter

string sql = "SELECT * From localitati"; 
da1 = new System.Data.SqlClient.SqlDataAdapter(sql, con); 
da1.Fill(ds1, "localitati"); 

Et cela fonctionne très bien. Le problème est lorsque j'essaie de supprimer un enregistrement et mettre à jour la base de données. supprimer un enregistrement de l'ensemble de données en tant que tel:

ds1.Tables["localitati"].Rows.Remove(dRow); 

Et cela fonctionne très bien aussi (Verified).

Le problème est quand je mettre à jour le DataAdapter, le DataBase ne soit pas modifié:

con.Open() 
da1.Update(ds1, "localitati"); 
con.Close(); 

Quel pourrait être le problème?

Répondre

2

Vous devez vous assurer que vous avez défini la da1.DeleteCommand - c'est la commande qui sera tiré pour chaque ligne de la DataTable qui a été supprimé. Voir this MSDN reference par exemple.

0

essayez ci-dessous le code en supposant que Database ne lève aucune exception.

con.Open() 
da1.Update(ds1.Tables["localitati"].GetChanges()); 
con.Close(); 
0

Dans le code que vous avez publié, seule la commande SelectCommand est définie pour le DataAdapter. Vous pouvez utiliser le code suivant pour générer les commandes Insert, Update et Delete pour da1.

string sql = "SELECT * From localitati"; 
da1 = new SqlDataAdapter(sql, con); 
SqlCommandBuilder builder = new SqlCommandBuilder(da1); 
builder.QuotePrefix = "["; 
builder.QuoteSuffix = "]"; 
da1.Fill(ds1, "localitati"); 

Le CommandBuilder doit cependant être utilisé que pour des scénarios relativement simples (details). Car il reste recommandé d'écrire ses propres commandes qui reposent sur des textes de commande personnalisés/procédures stockées. Si cela ne fonctionne toujours pas, vous pouvez démarrer un SQL Server Profiler sur le serveur pour suivre la commande qui accède à la base de données lorsque vous exécutez la méthode Update.

9

Ce qui m'a fixé pour était d'appeler la méthode Delete sur la DataRow au lieu de la méthode Remove sur la DataTable.

ds.Tables["localitati"].Rows.Find(primaryKeyValue).Delete(); 

ou tout simplement

dr.Delete(); 
+0

Cela devrait être la réponse acceptée. La méthode .Delete() alertera le DataTable parent que la ligne a été supprimée. Il ne suffit pas de retirer la ligne de la table. – oscilatingcretin

+0

ouais, les ans sont si bons. –

0
DataRow dr = datatable.Rows.Find(key);  
int Index = datatable.Rows.IndexOf(dr); 

BindingContext[DataTable].RemoveAt(Index);  
BindingContext[DataTable].EndCurrentEdit(); 

dataAdapter.Update(DataTable);  
DataTable.AcceptChanges(); 
+2

Certaines explications pourraient être sympa –

Questions connexes