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

2023-12-28

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

我在这里这样做了

本地 IF 表带有主键。

  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 在这里:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopyoptions(v=vs.110).aspx http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopyoptions(v=vs.110).aspx

System.Data.SqlClient.SqlBulkCopy bulkcopy = new System.Data.SqlClient.SqlBulkCopy(connWeb,System.Data.SqlClient.SqlBulkCopyOptions.KeepIdentity);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用具有相同主键的本地数据库表更新远程表? 的相关文章

  • WebClient.DownloadDataAsync 冻结了我的 UI

    我在 Form 构造函数中的 InitializeComponent 之后有以下代码 using WebClient client new WebClient client DownloadDataCompleted new Downloa
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • c# 从另一个类中的另一个静态事件引发事件

    需要帮助从另一个班级调用事件 我有已声明事件的课程 public class MxPBaseGridView GridView public event AddNewItemsToPopUpMenuEventHandler AddNewIt
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • C free() 是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 malloc 和 free 如何工作 https stackoverflow com questions 1119134 how malloc and free work include
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • 全局使用和 .NET Standard 2.0

    我最近意识到我可以使用 C 10 功能文件范围的命名空间在 NET Standard 2 0 项目中也可以通过设置
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • 无法为 wsdl 文件创建服务引用

    I have wsdl文件和xsd我本地机器上的文件 我想在项目中添加服务引用 我没有网络服务 我只有wsdl file 我收到以下错误 The document was understood but it could not be pro
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • 使用 xslt 将 xml 转换为 xsl-fo 时动态创建超链接?

    我想使用 xsl 文件在 PDF 报告中创建标题 如果源文件包含超链接 则应将其呈现为超链接 否则呈现为纯文本 例如 我的 xml 如下所示 a href http google com target blank This is the h
  • printf或iostream如何指定点后的最大位数

    字符串采用什么格式printf or iomanip我应该使用 iostream 中的运算符以以下格式打印浮点数 125 0 gt 125 125 1 gt 125 1 125 12312 gt 125 12 1 12345 gt 1 12
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp
  • 使用 C# 动态创建按钮并按预定义的顺序放置它们

    NET 4 5 C 创建 Windows 窗体 我想动态创建和添加按钮并为其分配单击事件 但希望它们以特定的方式动态放置 就像图像一样 我的问题是如何以上述方式动态放置按钮 即 4x4 格式 一行 4 个按钮 4 列 但行数不受限制 是否可
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost

随机推荐

  • 在 vim 中使用 xclip, 复制到剪贴板

    我在 Ubuntu 中有 vim 7 2 clipboard xterm clipboard 可以看到它不支持剪贴板 所以我想编写一个 vim 小脚本 使用 xclip 工具将视觉选定的文本复制到剪贴板中 你知道 xclip 工具的工作原理
  • 读取和写入 ANSI 格式的文本

    请看下面的代码 import java io public class CSVConverter private File csvFile private BufferedReader reader private StringBuffer
  • Python3 从同级目录导入模块/包

    这是我的代码目录结构 root proj1 module1 py init py sub proj1 module2 py init py proj2 module3 py 如果我想将代码从 module2 py 导入到 module3 p
  • 指向空对象的引用[重复]

    这个问题在这里已经有答案了 我看到了这个讨论 检查 C 中的 null 对象 https stackoverflow com questions 2099882 checking for a null object in c我很惊讶没有人谈
  • jQuery AutoComplete,自定义返回数据

    我正在尝试创建一个自动完成框 并且由于返回自定义数据而遇到问题 我似乎无法让它填充自动完成框 这是数据 JSON user id 1 user name jarru user id 2 user name harryq user id 3
  • 在 WooCommerce 中获取并显示所选变体 SKU

    我的代码适用于简单的产品类型 但不适用于 WooCommerce 中的可变产品 add shortcode product sku div wc product sku div function wc product sku div glo
  • Laravel 路由参数与 post 路由 vs post 参数

    路由参数应该只用于获取 删除请求吗 用户可以加入挑战 我希望为此拥有一个 API 端点 这个可以吗 Route post challenge challenge join UserController joinChallenge 或者我应该
  • fetch api 无法加载,不支持 url 方案“文件”

    我尝试使用fetch在本地主机上 但它不起作用 这是我的代码
  • 如何以动画方式删除使用 ForEach 循环创建的视图,并从 SwiftUI 中的 ObservableObject 获取其数据

    该应用程序具有以下设置 我的主视图使用 SwiftUI 创建标签云ForEach环形 这ForEach从获取其数据 Published的数组ObservableObject called TagModel 用一个Timer 每三秒Obser
  • 我是否将图像资源存储在公共或reactJS中的src中?

    我正在为我的应用程序使用 React 我有一个div我想要一张背景图片 但我无法让它显示 当我将它包含在src文件夹为myapp src bgimage png它工作得很好 但我听说我应该将它包含在名为的文件夹中images在根级别所以它是
  • 非恢复除法算法

    有谁知道使用非恢复除法除法无符号二进制整数的步骤 很难在网上找到任何好的资源 i e if A 101110 and B 010111 我们如何找到A divided by B在非恢复分裂中 每个步骤中的寄存器是什么样的 Thanks 我的
  • 指向泛型类型的指针

    在将给定的高效的基于指针的哈希图实现转换为通用哈希图实现的过程中 我偶然发现了以下问题 我有一个代表哈希节点的类 哈希映射实现使用二叉树 THashNode
  • 如何衡量编程语言的受欢迎程度?

    从此以后question https stackoverflow com questions 1311981 use of different net languages 我有兴趣了解如何衡量任何和所有编程语言的受欢迎程度 作为专业的开发者
  • Spring连接池[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Qt Creator 和主窗口背景图像

    我想添加图像作为主窗口的背景 添加此背景图片的最佳方式是什么 主窗口的其余部分必须是透明的 我想这样做QtCreator编辑器 因此 对于此组件 没有代码 您可以将背景图片添加到您的MainWindow通过执行以下操作 创建一个QPixma
  • 我无法使用 SNICallback

    我无法管理使用 SNICallbackcreateServer功能 当我尝试以下代码时 出现错误 Missing PFX or certificate pricate key 我该如何解决这个问题 var fs require fs tls
  • 如何将数据转换为矩阵格式

    我已通过 read csv 将原始数据 10000 行和 392 列 导入到 R 中 我想知道如何将其转换为矩阵格式 非常感谢您的帮助 您的问题可能会迁移到 StackOverflow 不过 答案比较简单 我会提供 read csv 会生成
  • 具有无符号短整数的结构的大小

    我在浏览我们的一份组织数据文档时发现了以下代码 struct A unsigned short int i 1 unsigned short int j 1 unsigned short int k 14 int main A aa int
  • 我是否应该将完整的网页作为 html/text 传递给休息 GET 调用

    我正在建立一个提供动态内容的网站 服务器 浏览器之间的所有通信都通过 REST 进行 PostgreSQL 用作数据存储 我的问题是对于任何 GET 请求 我是否应该动态构建 html 以及动态内容 举个例子 GET Produces Me
  • 如何用具有相同主键的本地数据库表更新远程表?

    我想从本地数据库表更新数据库的远程表 但是当我为大师更新时 我发现了主键不匹配的问题 那么是否有一种机制可以让我在本地使用相同的主键更新远程数据库表 如果我在本地删除记录 则远程主键不匹配 虽然我有两种类型的表 没有主键 也有主键 我在这里