2011-05-26 4 views
2

J'utilise un DataAdapter et DataTable pour modifier/ajouter des données dans une table Oracle , en utilisant ODP.NET fournisseur.DataAdapter commande Mise à jour

DataSet ds = new DataSet("report"); 
DataTable dt = new DataTable("report"); 
adptr = new OracleDataAdapter(); 
string myCmd = "select * from report";    

OracleCommand _cmd = new OracleCommand(myCmd, myDbConnection); 

adptr.SelectCommand = _cmd; 
adptr.Fill(dt); 
ds.Tables.Add(dt); 

Après cela, je modifier les données dans la table de données, en se liant à une grille et l'éditer et enregistrer comme ceci:

OracleCommandBuilder _cmdBld = new OracleCommandBuilder(adptr); 
adptr.Update(ds, "report"); 

Tout grand maintenant, il fonctionne comme il est censé , chaque modification est validée sur le DB. Mais mon problème est le suivant - quand j'obtiens des données de plus d'une table. comme ceci:

string myCmd = 
    "select r.id, u.username, r.creation_date, r.owner 
    from report r inner join users u on r.user_id == u.id"; 

Je sais que je pourrais écrire la commande de mise à jour de DataAdapter manuellement (DataAdapter.UpdateCommand), avant d'enregistrer, mais je ne suis pas sûr de savoir comment. Pouvez-vous me donner quelques indications?

Merci!

Répondre

3

Consultez l'exemple fourni dans MSDN. Je suppose que OracleDataAdapter fonctionne avec la même logique. http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.updatecommand.aspx

Voici la section de mise à jour de génération de commande de lien spécifié

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

merci! mais comment la commande insert ou update chercherait-elle si les données étaient fournies par deux tables jointes comme dans mon exemple? – maephisto

Questions connexes