2009-06-24 12 views
0

Désolé pour la question probablement stupide. Puisque je n'ai rien trouvé à ce sujet sur les internets, c'est probablement tout à fait évident et je suis juste aveugle à voir ?!Méthode de mise à jour DataAdapter - Quelle connexion utilise-t-elle?

Je suis en train de mettre à jour une table dans une base de données à partir d'un ensemble de données via DataAdapter.Update (jeu de données)

Mais il n'y a pas possibilité de définir la connexion, le DA doit utiliser.

Où le DA sait-il se connecter à la base de données? Ou ai-je mal compris le concept de l'adaptateur de données?

mon code actuel est comme:

protected DataSet UpdateDataSet(DataSet ds) 
{ 
    DataSet dsChanges = new DataSet(); 
    SqlDataAdapter da = new SqlDataAdapter(); 

    dsChanges = ds.GetChanges(); 

    //Update DataSet 
    da.Update(dsChanges); 

    ds.Merge(dsChanges); 
    return ds; 
} 

Je viens d'écrire cela et est devenu suspect comment (ou si) cela fonctionne ... Je nai testé jusqu'à présent, puisque je dois écrire un autre code avant que je peut tester correctement

Merci ppl, StackOVerflow FTW!

+0

Vous instanciation d'un jeu de données vide (de dsChanges) puis écrasez avec un autre. Ne l'initialisez pas comme ça. – cjk

+0

merci pour cet indice! Ce serait mieux (?): DataSet dsChanges = ds.GetChanges(); –

Répondre

5

Un SqlDataAdapter doit prendre en charge un objet SqlCommand auquel est lié un objet SqlConnection. C'est à peu près comme cela que la hiérarchie s'effondre.

Quant à comment vous allez faire cela, il y a des options pour les passer dans le constructeur, ainsi que la définition des différentes propriétés après la construction.

Voici un msdn article avec des exemples de sélection, d'insertion, de mise à jour et de suppression.

FTA:

public static SqlDataAdapter CreateCustomerAdapter(
    SqlConnection connection) 
{ 
    SqlDataAdapter adapter = new SqlDataAdapter(); 

    // Create the SelectCommand. 
    SqlCommand command = new SqlCommand("SELECT * FROM Customers " + 
     "WHERE Country = @Country AND City = @City", connection); 

    // Add the parameters for the SelectCommand. 
    command.Parameters.Add("@Country", SqlDbType.NVarChar, 15); 
    command.Parameters.Add("@City", SqlDbType.NVarChar, 15); 

    adapter.SelectCommand = command; 

    // Create the InsertCommand. 
    command = new SqlCommand(
     "INSERT INTO Customers (CustomerID, CompanyName) " + 
     "VALUES (@CustomerID, @CompanyName)", connection); 

    // Add the parameters for the InsertCommand. 
    command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID"); 
    command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 
     40, "CompanyName"); 

    adapter.InsertCommand = command; 

    // Create the UpdateCommand. 
    command = new SqlCommand(
     "UPDATE Customers SET CustomerID = @CustomerID, " + 
     "CompanyName = @CompanyName " + 
     "WHERE CustomerID = @oldCustomerID", connection); 

    // Add the parameters for the UpdateCommand. 
    command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID"); 
    command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 
     40, "CompanyName"); 
    SqlParameter parameter = command.Parameters.Add(
     "@oldCustomerID", SqlDbType.NChar, 5, "CustomerID"); 
    parameter.SourceVersion = DataRowVersion.Original; 

    adapter.UpdateCommand = command; 

    // 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; 

    return adapter; 
} 
+0

ok, c'est ce que je fais quand j'essaie de récupérer des données. Je passe un objet de commande. Mais la méthode de mise à jour de DataAdapter n'accepte qu'un DataSet (et d'autres choses, mais aucun objet de commande) –

+2

@ MAD9 Le SqlDataAdapter possède également une propriété UpdateCommand que vous pouvez assigner à un objet SqlCommand pour répondre à vos besoins. Cela fonctionne également pour l'insertion et la suppression. – Joseph

+0

Ok, merci encore ppl. Le problème était, que je ne savais pas où je devrais obtenir cet objet de commande puisque je n'avais pas explicitement une chaîne SQL ou plus. –