2013-12-23 13 views
1

我想從本地數據庫表中更新數據庫的遠程表。 但是,當我爲主人更新我fackign不匹配主鍵的問題。 那麼有沒有一種機制,我可以用本地相同的主鍵來更新遠程數據庫表。如果我在本地刪除一條記錄,則遠程的主鍵不匹配。 雖然我有兩種類型的表,沒有主鍵和主鍵。如何使用具有相同主鍵的本地數據庫表來更新遠程表?

在這裏,我做到了這一點

如果在本地與主鍵的表。

public bool PublishDressingDetails() 
     { 
      int isUpdated = -1; 
      try 
      { 
       DataTable DressingDetailsLocalDT = cDressing.GetAllDressingDetailsDTForExport(); 
       if (DressingDetailsLocalDT.Rows.Count > 0) 
       { 

        //SqlDataAdapter DA = new SqlDataAdapter("select * from Toppings where ClientID=2", connWeb); 
        SqlDataAdapter DA = new SqlDataAdapter("select * from DressingDetails", connWeb); 

        DA.InsertCommand.Transaction = transaction; 
        DA.UpdateCommand.Transaction = transaction; 
        DA.DeleteCommand.Transaction = transaction; 

        SqlCommandBuilder SCB = new SqlCommandBuilder(DA); 

        DataSet DS = new DataSet(); 
        DA.Fill(DS, "DressingDetails"); 
        //DS.Tables[0].PrimaryKey = new DataColumn[] { DS.Tables[0].Columns["ClientID"], DS.Tables[0].Columns["ToppingID"] }; 
        DS.Tables[0].PrimaryKey = new DataColumn[] { DS.Tables[0].Columns["DressingID"] }; 

        object[] searchVal = new object[1]; 
        //searchVal[0] = "2"; 

        //DataRow drSrc; 
        foreach (DataRow drLocal in DressingDetailsLocalDT.Rows) 
        { 
         searchVal[0] = drLocal["DressingID"].ToString(); 
         DataRow drSrc = DS.Tables[0].Rows.Find(searchVal); 
         if (drSrc == null) 
         { 
          drSrc = DS.Tables[0].NewRow(); 
          //drSrc["ClientID"] = "2"; 
          drSrc["DressingID"] = drLocal["DressingID"].ToString(); 

          if (drLocal["Description"] != DBNull.Value) 
          { 
           drSrc["Description"] = drLocal["Description"].ToString(); 
          } 
          else drSrc["Description"] = DBNull.Value; 

          if (drLocal["Position"] != DBNull.Value) 
          { 
           drSrc["Position"] = drLocal["Position"].ToString(); 
          } 
          else drSrc["Position"] = DBNull.Value; 


          if (drLocal["IsDeleted"] != DBNull.Value) 
          { 
           drSrc["IsDeleted"] = drLocal["IsDeleted"].ToString(); 
          } 
          else drSrc["IsDeleted"] = DBNull.Value; 


          if (drLocal["icon"] != DBNull.Value) 
           drSrc["icon"] = drLocal["icon"]; 
          else 
           drSrc["icon"] = DBNull.Value; 


          DS.Tables[0].Rows.Add(drSrc); 
         } 
         else 
         { 
          //drSrc["ClientID"] = "2"; 
          drSrc["DressingID"] = drLocal["DressingID"].ToString(); 
          if (drLocal["Description"] != DBNull.Value) 
          { 
           drSrc["Description"] = drLocal["Description"].ToString(); 
          } 
          else drSrc["Description"] = DBNull.Value; 

          if (drLocal["Position"] != DBNull.Value) 
          { 
           drSrc["Position"] = drLocal["Position"].ToString(); 
          } 
          else drSrc["Position"] = DBNull.Value; 

          if (drLocal["IsDeleted"] != DBNull.Value) 
          { 
           drSrc["IsDeleted"] = drLocal["IsDeleted"].ToString(); 
          } 
          else drSrc["IsDeleted"] = DBNull.Value; 


          if (drLocal["icon"] != DBNull.Value) 
           drSrc["icon"] = drLocal["icon"]; 
          else 
           drSrc["icon"] = DBNull.Value; 
         } 

        } 
        isUpdated = DA.Update(DS, "DressingDetails"); 

       } 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 

      return (isUpdated != -1) ? true : false; 
     } 

沒有主鍵。

public bool PublishMealDealDetail() 
     { 
      bool isUpdated = true; 
      try 
      { 
       DataTable dtLocal = libEPOS.cMealDeal.GetAllMealDealDetailsDTForExport(); 
       if (dtLocal.Rows.Count > 0) 
       { 
        //truncate table on web 
        string sqlTrunc = "TRUNCATE TABLE MealDealDetail"; 
        SqlCommand cmd = new SqlCommand(sqlTrunc, connWeb, transaction); 
        // connWeb.Open(); 
        cmd.ExecuteNonQuery(); 
        SqlBulkCopy bulkcopy = new SqlBulkCopy(connWeb); 
        bulkcopy.DestinationTableName = "MealDealDetail"; 
        try 
        { 
         bulkcopy.WriteToServer(dtLocal); 
        } 
        catch (Exception e) 
        { 
         transaction.Rollback(); 
         isUpdated = false; 
         Console.WriteLine(e.Message); 
        } 

       } 
      } 
      catch (Exception ex) 
      { 
       transaction.Rollback(); 
       isUpdated = false; 
       throw ex; 
      } 

      return isUpdated; 
     } 
+0

「那麼,有沒有我可以更新與本地相同主鍵遠程數據庫表的機制」看看數據庫複製,無需代碼。 – Kelmen

回答

相關問題