C# + MySQL 准备语句 w/ON DUPLICATE KEY UPDATE 问题

2024-01-07

我有一个 C# 应用程序,在使用带有 ON DUPLICATE KEY UPDATE 的预准备语句到 MySQL 时出现问题。

当我在之前的断点处检查连接变量时mypcmd.ExecuteNonQuery();, mypcmd.IsPrepared is false。 该查询不执行任何操作(它应该更新,因为主键已经存在)并且没有抛出异常。mypcmd.Parameters.count = 25正如它应该的那样,如果我深入到数据视图,这些值是正确的。

当查询完成时,键 0 会更新为所有参数名称(即 fname: ?fname、middlename: ?middlename 等,而不是精确值)

  • MySQL服务器版本是5.0.51a-24+lenny5
  • MySQL C# 程序集版本 (mysql.data.dll) 6.3.6.0
  • 应用程序是WPF .NET 4.0

代码如下:

const string sqlIpatients = @"
INSERT INTO `tblpatients` (  `number`,`fname`,`middlename`,`surname`,
                            `title`,`contactno`,`mobileno`,`sex`,`dob`,
                            `housename`,`houseno`,`address1`,`address2`,
                            `address3`,`address4`,`postcode`,`notes`,`home`,
                            `sp1`,`sp2`,`sp3`,`sp4`,`sp5`,`sp6`,`email`)
                    VALUES( '?number','?fname','?middlename','?surname',
                            '?title','?contactno','?mobileno','?sex','?dob',
                            '?housename','?houseno','?address1','?address2',
                            '?address3','?address4','?postcode','?notes','?home',
                            '?sp1','?sp2','?sp3','?sp4','?sp5','?sp6','?email')
    ON DUPLICATE KEY UPDATE `number`=VALUES(`number`), `fname`=VALUES(`fname`), `middlename`=VALUES(`middlename`), `surname`=VALUES(`surname`),
                            `title`=VALUES(`title`), `contactno`=VALUES(`contactno`), `mobileno`=VALUES(`mobileno`), `sex`=VALUES(`sex`), `dob`=VALUES(`dob`),
                            `housename`=VALUES(`housename`), `houseno`=VALUES(`houseno`), `address1`=VALUES(`address1`), `address2`=VALUES(`address2`),
                            `address3`=VALUES(`address3`), `address4`=VALUES(`address4`), `postcode`=VALUES(`postcode`), `notes`=VALUES(`notes`), `home`=VALUES(`home`),
                            `sp1`=VALUES(`sp1`), `sp2`=VALUES(`sp2`), `sp3`=VALUES(`sp3`), `sp4`=VALUES(`sp4`), `sp5`=VALUES(`sp5`), `sp6`=VALUES(`sp6`), `email`=VALUES(`email`)";

...

MySqlCommand mypcmd = new MySqlCommand(sqlIpatients, myConn2);
    mypcmd.Prepare();
    mypcmd.Parameters.Add("?number", MySqlDbType.UInt32);
    mypcmd.Parameters.Add("?fname", MySqlDbType.VarChar, 20);
    mypcmd.Parameters.Add("?middlename", MySqlDbType.VarChar, 20);
    mypcmd.Parameters.Add("?surname", MySqlDbType.VarChar, 40);
    mypcmd.Parameters.Add("?title", MySqlDbType.VarChar, 6);
    mypcmd.Parameters.Add("?contactno", MySqlDbType.VarChar, 40);
    mypcmd.Parameters.Add("?mobileno", MySqlDbType.VarChar, 40);
    mypcmd.Parameters.Add("?sex", MySqlDbType.VarChar, 1);
    mypcmd.Parameters.Add("?dob", MySqlDbType.Date);
    mypcmd.Parameters.Add("?housename", MySqlDbType.VarChar, 20);
    mypcmd.Parameters.Add("?houseno", MySqlDbType.VarChar, 20);
    mypcmd.Parameters.Add("?address1", MySqlDbType.TinyText);
    mypcmd.Parameters.Add("?address2", MySqlDbType.TinyText);
    mypcmd.Parameters.Add("?address3", MySqlDbType.TinyText);
    mypcmd.Parameters.Add("?address4", MySqlDbType.TinyText);
    mypcmd.Parameters.Add("?postcode", MySqlDbType.TinyText);
    mypcmd.Parameters.Add("?notes", MySqlDbType.Text);
    mypcmd.Parameters.Add("?home", MySqlDbType.UInt16);
    mypcmd.Parameters.Add("?sp1", MySqlDbType.VarChar, 1);
    mypcmd.Parameters.Add("?sp2", MySqlDbType.VarChar, 1);
    mypcmd.Parameters.Add("?sp3", MySqlDbType.VarChar, 1);
    mypcmd.Parameters.Add("?sp4", MySqlDbType.VarChar, 1);
    mypcmd.Parameters.Add("?sp5", MySqlDbType.VarChar, 1);
    mypcmd.Parameters.Add("?sp6", MySqlDbType.VarChar, 1);
    mypcmd.Parameters.Add("?email", MySqlDbType.Text);

    var prodr = procmd.ExecuteReader();
    while (prodr.Read())
    {
        foreach (MySqlParameter p in mypcmd.Parameters)
        {
            p.Value = prodr[p.ParameterName.Replace("?", "")].ToString().Trim();
        }
    }
    mypcmd.ExecuteNonQuery();

我缺少什么?请帮忙!


刚刚发现问题是什么。必须从 SQL 查询中删除单引号。现在就像一个魅力。

对如此简单的修复感到恼火,希望这能减轻我的头痛。

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

C# + MySQL 准备语句 w/ON DUPLICATE KEY UPDATE 问题 的相关文章

  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 如何在 SQL Server 中连接

    我的数据库没有特定的列 因此我通过开关在查询中创建了一个列 我需要的是将此列与数据库中的另一列连接起来 select certificateDuration DurationType case when certificateDuratio
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler

随机推荐