2009-03-04 5 views
1

J'essaie de supprimer des données d'une table en utilisant un SQLDataAdapter, et pour ce faire, je dois lui donner un DeleteCommand.Création d'une SQLCommand à utiliser dans un SQLDataAdapter

SQL j'utiliser pour supprimer une ligne est:

DELETE FROM table WHERE ID = x 

Le problème est donc: Comment puis-je indiquer au DataAdapter quoi remplacer x avec? Le SQL pour générer le DataAdapter est légèrement différent (pas de jointures) que la table de données à mettre à jour (une jointure externe).

Comment est-ce que je peux faire ceci?

Répondre

4

Ici vous pouvez passer le paramètre à supprimer commande:

// Create the DeleteCommand. 
command = new SqlCommand(
    "DELETE FROM Customers WHERE CustomerID = @CustomerID", connection); 

// Add the parameters for the DeleteCommand. 
parameter = command.Parameters.Add(
     "@CustomerID", SqlDbType.NChar, 5, "CustomerID"); 
parameter.SourceVersion = DataRowVersion.Original; 

adapter.DeleteCommand = command; 

Le code tiré de MSDN

+0

Ai-je besoin de vérifier l'injection SQL avec ceci? – Malfist

+0

Non, vous ne passez pas les entrées en paramètre. – Canavar

1

utilisation sourceColumn et SourceVersion propriétés SqlParameter:

 var deleteCommand = connection.CreateCommand(); 
     deleteCommand = "DELETE FROM table WHERE ID = @ID"; 
     var param = new SqlParameter("ID"); 
     param.SourceColumn = "the Select Column"; 
     param.SourceVersion = DataRowVersion.Original; 
     deleteCommand.Parameters.Add (param); 
+0

Pouvez-vous expliquer ce que le SourceVersion est? – Malfist

+0

SourceVersion indique quelle valeur sera utilisée, Original est la valeur d'origine obtenue avec la requête select, Current est la valeur actuelle du champ, comme si vous l'aviez modifiée. – albertein

Questions connexes