Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用具有相同主键的本地数据库表更新远程表?_C#_Ado.net - Fatal编程技术网

C# 如何使用具有相同主键的本地数据库表更新远程表?

C# 如何使用具有相同主键的本地数据库表更新远程表?,c#,ado.net,C#,Ado.net,我想从本地数据库表更新数据库的远程表。 但是,当我更新主控时,我遇到了主键不匹配的问题。 所以,是否有一种机制可以在本地使用相同的主键更新远程数据库表。如果在本地删除记录,则在远程删除时主键不匹配。 虽然我有两种类型的表,没有主键,也有主键 public bool PublishDressingDetails() { int isUpdated = -1; try { Da

我想从本地数据库表更新数据库的远程表。 但是,当我更新主控时,我遇到了主键不匹配的问题。
所以,是否有一种机制可以在本地使用相同的主键更新远程数据库表。如果在本地删除记录,则在远程删除时主键不匹配。 虽然我有两种类型的表,没有主键,也有主键

  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;
        }
我就是这样做的

如果表位于具有主键的本地

  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;
        }
没有主键

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

您可以使用
System.Data.SqlClient.SqlBulkCopyOptions.KeepIdentity
在更新表时保持从一个源到另一个源的标识

MSDN此处:


“是否有一种机制可以在本地使用相同的主键更新远程数据库表”查看数据库复制,无需代码。