Excel VBA MySql 参数化更新“无效参数类型”

2024-04-17

我正在创建一个界面,用户可以在其中使用 Excel 无缝更改 SQL 数据库。我可以很好地检索数据,但是在更新记录时我得到“无效的参数类型”。

只需将值连接到查询中就可以正常工作,但是为了防止 SQL 注入,我需要参数化查询。我尝试用该值替换 ADO 数据类型,但这并没有改变任何内容。我尝试过未命名的参数,它总是向数据库提交值 16,而不是所需的字符串值

Private Sub Worksheet_Change(ByVal Target As Range)
        ID = Cells(Target.Row, 1).Value
        Dim locValue As String
        locValue = Cells(Target.Row, 2).Value

        Dim Cm As ADODB.Command
        Set Cm = New ADODB.Command

        Cm.NamedParameters = True
        Cm.CommandText = "UPDATE issues SET " _
        & "location = @location " _
        & "WHERE id = " & ID

        Dim locationParameter As ADODB.Parameter

        Set locationParameter = Cm.CreateParameter("@location", adVarChar, adParamInput, 255)
        Cm.Parameters.Append locationParameter
        locationParameter.Value = locValue

        SqlConnection(Cm)
End Sub

(我知道 ID 尚未参数化,问题在于位置)

Public Function SqlConnection(Cm As ADODB.Command) As ADODB.Recordset
 Dim Cn As ADODB.Connection
    Dim Server_Name As String
    Dim Database_Name As String
    Dim User_ID As String
    Dim Password As String
    Dim SQLStr As String

    Server_Name = "127.0.0.1" ' Enter your server name here
    Database_Name = "issues_and_outages" ' Enter your  database name here
    User_ID = "root" ' enter your user ID here
    Password = "password" ' Enter your password here

    Set Cn = New ADODB.Connection
    Cn.Open "Driver={MySQL ODBC 8.0 ANSI Driver};Server=" & Server_Name & ";Database=" & Database_Name & _
    ";Uid=" & User_ID & ";Pwd=" & Password & ";"

    Cm.CommandType = adCmdText
    Cm.ActiveConnection = Cn

    Set SqlConnection = Cm.Execute

End Function

服务器是 MySQL,带有 issues_and_outages 表,其中包含以下列:

  • id(整数、无符号、密钥、自动增量)

  • 位置(varchar(255),可为空)

更新单元格时,应更新位置列,出现以下错误

“运行时错误‘-2147217887 (80040e21)’: [MySQL][ODBC 8.0(a) 驱动程序][mysqld-8.0.16] 参数类型无效”

给出,但 Cm.Execute 行出现错误。然而,数据库有一个大小为 255 的 varchar 类型的列,它应该是一个 adVarChar,所以我预计不会出现错误。


正如定期讨论和总结的那样所以答案 https://stackoverflow.com/a/10725607/1422451,大多数提供程序/驱动程序的 ADO API 不支持非存储过程 SQL 语句的命名参数。而是使用 qmark,位置参数样式。

Set Cm = New ADODB.Command

With Cm
    .ActiveConnection = Cn
    .CommandType = adCmdText
    .CommandText = "UPDATE issues SET location = ? WHERE id = ?"

    .Parameters.Append .CreateParameter("loc_param", adVarChar, adParamInput, 255, locValue)
    .Parameters.Append .CreateParameter("id_param", adInteger, adParamInput,, ID)

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

Excel VBA MySql 参数化更新“无效参数类型” 的相关文章

  • 如何抑制输出并检查命令是否成功?

    我正在尝试编写一个 powershell 脚本来测试 MySQL 登录是否成功 检查是否发生错误 我还想抑制命令的所有输出 成功或不成功 这些是我尝试过的事情 mysql u root password mypass e show data
  • VBA Excel 2010 - 直接从剪贴板粘贴

    我正在尝试直接从剪贴板粘贴到 Excel 文档中并进行转置 Dim DataObj As MSForms DataObject Set DataObj New MSForms DataObject DataObj GetFromClipbo
  • MySqlBulkLoader 说明

    你能告诉我什么吗MySqlBulkLoader的用途 在哪里以及如何使用它 一些例子也将不胜感激 请 MySQLBulkLoader是MySQL Connector Net类中的一个类 包装了MySQL语句LOAD DATA INFILE
  • 使用 KMS 的 AWS RDS 加密是否会影响性能?

    Amazon states https aws amazon com about aws whats new 2015 01 06 amazon rds encryption with kms mysql postgresql that 加
  • 资源 ID #4 PHP MYSQL

    result mysql query SELECT indvsum sum1 indvsum sum2 FROM SELECT SUM Cash AS sum1 SUM Bank AS sum2 FROM players indvsum e
  • 如何使用mac杀死mysql进程

    I used ps ax grep mysql检查mysql进程是否存在 我发现 5323 s000 S 0 00 00 grep mysql 我想终止该进程 但号码自动更改 当我进入ps ax grep mysql 内容变化如下 5507
  • 通过页面打开 mysql 连接是完全鲁莽的吗?

    当查询数据库时 是否会感到极度偏执 每次必须完成新查询时 我都会打开和关闭 mysql 连接 我担心 尤其是启用 ajax 的页面 这会导致性能大幅下降 我应该继续使用此方法 还是至少在每个页面 而不是每个查询 中打开和关闭连接一次 顺便说
  • 强制 Access 忘记链接表的用户名和密码

    我有一个通过链接服务器连接到 SQL Server 的 MS Access 数据库 链接表是使用修改后的添加的AttachDSNLessTable程序 stConnect ODBC DRIVER stDriverName SERVER st
  • 用于 MySQL 全文搜索的转义字符串

    我正在使用 Laravel 4 并设置了以下查询 if Input get keyword keyword Input get keyword search DB connection gt getPdo gt quote keyword
  • CSV 损坏,如何修复?

    我正在尝试解析 CSV 我想将它放入数据库或只是用 JavaScript 解析它 但由于语法损坏 任何一种方法都会失败 我的整个 CSV 文件在这里 https gist github com 1023560 https gist gith
  • PDO 和 IS NOT NULL 函数

    我是 PDO 新手 我想知道是否有相当于 mysql 语句的语句来检查参数是否不为空 例如 SELECT FROM table WHERE param IS NOT NULL 我试过这个 pdo gt prepare SELECT FROM
  • 如何使用 Laravel 查询生成器在 WHERE 条件周围添加括号

    我使用 Laravel 查询构建器根据用户的过滤器选择动态过滤数据 query DB table readings foreach selections as selection query gt orWhere id selection
  • MySQL 主键是否已经处于某种默认顺序

    我刚刚在一个我刚刚开始使用的系统中偶然发现了几行我并不真正理解的代码 该系统有一个大表 可以保存大量具有唯一 ID 的实体 并在不再需要时将其删除 但绝不会重用它们 所以桌子看起来像这样 id info1 info2 info3 1 foo
  • 使用Python mysql.connector远程连接MySQL

    以下代码 在同一 LAN 内与 mysql 服务器不同的机器上运行 使用 Python3 和 mysql connector 本地连接到 MySQL 数据库 import mysql connector cnx mysql connecto
  • SQL Server 与 MySQL:CONTAINS(*,'FORMSOF(THESAURUS,word)')

    我很震惊 当我在 SQL Server 中看到查询非常简单时 我花了 3 4 天弄清楚如何在 mysql 中实现词干提取 和同义词搜索 Select from tab where CONTAINS FORMSOF THESAURUS wor
  • 插入值数组

    我有一个具有可变数量值的数组 除了内部带有查询的循环之外 是否有更有效或更好的方法将它们插入到我的数据库中 At 这个网站 http www desilva biz mysql insert html 有一个很好的 MySQL 多插入查询示
  • vba powerpoint按名称选择幻灯片

    我正在尝试按名称选择一张幻灯片 我通过大纲添加了标题 下面是不起作用的代码 在幻灯片集合中找不到爱达荷州项目 ActivePresentation Slides Idaho Select 幻灯片的名称和标题占位符中的文本彼此无关 除非您已重
  • MySQL:错误 1215 (HY000):无法添加外键约束

    我读过了数据库系统概念 第六版 西尔伯沙茨 我将在 OS X 上的 MySQL 上实现第 2 章中所示的大学数据库系统 但我在创建表格时遇到了麻烦course 桌子department好像 mysql gt select from depa
  • 通过变量引用工作簿和工作表

    引用不同工作簿的工作表的正确语法是什么 以下代码在最后一行抛出错误 谢谢 Instantiate Workbook variables Dim mWB As Workbook master workbook Instantiate Work
  • 总小时数无法从 Android 插入 MySQL

    我使用以下公式获得总小时数 public void updateTotalHours int a SplitTime objMyCustomBaseAdapter getFistTime int b SplitTime objMyCusto

随机推荐

  • 在Sandbox中使用Cocoa NSSavePanel导致断言失败

    我正在尝试使用 NSSavePanel 并将这一行添加到我的代码中 let test NSSavePanel 每次调用此代码时都会出现此错误 我不太确定这里发生了什么 因为我只是创建一个新对象 任何帮助表示赞赏 谢谢 Assertion f
  • 如何在 MVC Core 和 AutoFac 中使用属性注入

    我可以在 MVC Core 中轻松使用构造函数参数注入 但不支持属性注入 我尝试使用 AutoFac 但也失败了 那么如何在MVC Core中使用属性注入 这是 AutoFac 的代码 services AddMvc ContainerBu
  • 使用 Linkify Android 打开 Activity

    我想在用户使用 linkify 单击 textView 时打开 Activity 这是我的代码 Pattern tagMatcher Pattern Compile A Za z0 9 Scheme for Linkify when a w
  • C++ 中的 malloc/free 和 new/delete 兼容性?

    malloc free 和 new delete 有一个很好的比较here https stackoverflow com questions 240212 what is the difference between new delete
  • 致命错误:netinet/in.h:没有这样的文件或目录

    套接字编程 UDP 服务器 我正在尝试使用 UDP 服务器进行消息加密和解密 代码在这里 https www geeksforgeeks org message encryption decryption using udp server
  • 创建一个 python 脚本来安装 python 模块并运行一些命令

    我想围绕这个库创建一个薄包装https github com jupyter incubator sparkmagic installation https github com jupyter incubator sparkmagic i
  • Django - ImportError:无法导入名称 Celery

    这是我第一次使用 celery 我完成了这个教程 将 celery 与 Django 一起使用 http docs celeryproject org en latest django first steps with django htm
  • 如何解码哈希

    如果攻击者可以访问用户的数据库并且密码存储在哈希值中 攻击者可以解码该哈希值吗 您能推荐任何可以解码哈希值的工具吗 您可以在这里找到更多详细信息 http crackstation net hashing security htm http
  • C#/WPF:如何单独显示 ListView 的最后一行?

    我有一个 ListView 其中包含大约 10 个 GridViewColumn 和大约 100 行 行 我想在 ListView 的底部显示 总计 或摘要行 有谁知道如何做到这一点 保持 ColumnWidth 等像其他一样并将其作为一个
  • 在 UITextview 中加载巨大的文本文件会崩溃

    我想更新 UITextView 中的一个巨大的文本文件 但设备有时会挂起或崩溃 文本文件大小为 4MB UITextView 是从 Interface Builder 添加的 我正在从文档目录加载文件 以下是加载文本文件的代码 NSErro
  • 如何从函数返回值 - React Native

    如何从反应本机函数返回布尔值 它可以这样完成 export function isJson str try JSON parse str catch e return false return true 该函数检查提供的值是否有效JSON
  • 检查标准输入缓冲区是否为空

    我正在尝试用字符读取数字字符 但我不知道标准输入缓冲区是否为空 我的第一个解决方案是寻找 n标准输入缓冲区中的字符 但是如果我要输入由分隔符分隔的多个数字 这就没用了 我如何知道标准输入缓冲区中是否有字符 我需要用 C 语言来完成它并且是可
  • 编译后的第一次执行非常慢,除非“明显”所有循环都会停止

    我这个标题的意思是 在某些情况下 构建整个程序后 它的第一次执行将需要大约 25 秒才能开始 直到第一个 printf 在控制台上显示 接下来的执行几乎立即开始 正如它们应该的那样 添加 删除一个空格并再次编译 之后的第一次执行再次变得极其
  • 如何在同一图上显示条形图和折线图

    我无法在同一绘图上显示条形图和折线图 示例代码 import pandas as pd import numpy as np import matplotlib pyplot as plt Df pd DataFrame data np r
  • Python-Selenium 查找不可点击的可点击元素

    我在用python selenium运行自动化测试 在复杂的非公共环境中运行这些测试时 我发现了一些我将标记为 selenium 中的错误的东西 基本上我想做的是在 DOM 中找到一些元素 当它变得可点击时 然后点击它 代码如下 what
  • 处理程序如何/何时被垃圾收集?

    在我的一个类中 我有以下代码 mHandler createHandler private Handler createHandler return new Handler public void handleMessage Message
  • 声明按位运算的掩码

    我是这样的低级操作的新手 我希望有人能指出我在这里犯的明显错误 Input value 00111100 I want to get the value of the bits at indexes 1 3 i e 0111 byte ma
  • SqlConnection 并避免升级到 MSDTC

    当我们需要在应用程序中进行数据库访问时 我们使用以下模式 为了查询 我们有一个带有方法的静态工厂类CreateOpenConnection其作用无非是new SqlConnection myConnectionString 并打电话Open
  • 在 Android 中使用自定义字体

    我想为我正在创建的 Android 应用程序使用自定义字体 我可以从代码中单独更改每个对象的字体 但我有数百个对象 So 有没有办法从 XML 中做到这一点 设置自定义字体 有没有一种方法可以从一个地方的代码中做到这一点 即整个应用程序和所
  • Excel VBA MySql 参数化更新“无效参数类型”

    我正在创建一个界面 用户可以在其中使用 Excel 无缝更改 SQL 数据库 我可以很好地检索数据 但是在更新记录时我得到 无效的参数类型 只需将值连接到查询中就可以正常工作 但是为了防止 SQL 注入 我需要参数化查询 我尝试用该值替换