2010-12-06 7 views
2

J'essaie de mettre à jour un ensemble de requêtes en utilisant DataAdapter de .NET. Voici une version simplifiée de ce que je fais:Qu'est-ce que je fais de mal avec ma requête de mise à jour?

 //get all transactions that need to be made 
     String sql = "SELECT r.ID, r.[Check], r.Cash, r.Coin, r.TenantID, t.TenantName, r.PropertyID, u.UnitNumber, r.ReceivedFrom, r.isDeposited FROM tblCashReceipts r " + //I don't actually think all this is needed, if nessecary I can go back and remove unnessecary selections 
      "LEFT JOIN tblTenant t " + 
      "ON t.ID = r.TenantID " + 
      "LEFT JOIN tblProperty p " + 
      "ON p.ID = r.PropertyID " + 
      "LEFT JOIN tblRentalUnit u " + 
      "ON t.UnitID = u.id " + 
      "WHERE p.CheckbookID = " + checkbookId; 

     //populate the data table 
     DataTable receipts = new DataTable(); 
     using (SqlConnection conn = new SqlConnection(connectionString)) { 
      conn.Open(); 
      SqlDataAdapter adapter = new SqlDataAdapter(sql, conn); 
      try { 
       adapter.Fill(receipts); 
      } catch (Exception ex) { 
       MessageBox.Show(ex.Message); 
      } finally { 
       conn.Close(); 
      } 
     } 

     //update the row 
     foreach (DataRow row in receipts.Rows) { 
      //no longer removing, it will be left entact with the hidden tblCashReceipt row 
      row["isDeposited"] = true; 
     } 

     //now make the database reflect our changes to the tblCashReceiptes 
     using (SqlConnection conn = new SqlConnection(connectionString)) { 
      SqlDataAdapter receiptsAdapter = new SqlDataAdapter("SELECT ID FROM tblCashReceipts", connectionString); 
      //create delete command 

      conn.Open(); 

      SqlCommand receiptsUpdateCommand = new SqlCommand("UPDATE tblCashReceipts SET isDeposited = @isDeposited WHERE ID = @ID", conn); 

      SqlParameter idParam = receiptsUpdateCommand.Parameters.Add("@ID", SqlDbType.Int, 5, "ID"); 
      idParam.SourceVersion = DataRowVersion.Original; 

      SqlParameter depositiedParam = receiptsUpdateCommand.Parameters.Add("@isDeposited", SqlDbType.Bit, 1, "isDeposited"); 
      depositiedParam.SourceVersion = DataRowVersion.Original; 

      receiptsAdapter.UpdateCommand = receiptsUpdateCommand; 
      receiptsAdapter.Update(receipts); 
     } 

Cependant, je trouve que les receiptsAdapter.Update (recettes); n'entraîne pas réellement la mise à jour de la base de données. Qu'est-ce que je fais mal?

Une manière simplifiée d'écrire ceci serait simplement d'exécuter la commande sql de: UPDATE tblCashReceipts SET isDeposited = 1 WHERE {my clause} Mais je veux apprendre à utiliser ADO.NET.

Répondre

2

ligne ci-dessous est d'avoir problème

depositiedParam.SourceVersion = DataRowVersion.Original; 

il doit être

depositiedParam.SourceVersion = DataRowVersion.Current; 
Questions connexes