如何参数化复杂的 OleDB 查询?

2023-12-10

我正在尝试重构一些使用字符串连接来创建 SQL 命令的代码(这使得它容易受到 SQL 注入的攻击)。基本上我想做的就是更换所有string sqlToExecute = String.Format(..)带有 SQL 命令和 OleDB 参数列表的语句。

我了解如何在简单的情况下做到这一点,例如String.Format("Select * from myTable where id = {0}", id)。但是,我找不到一组针对更复杂的 SQL 查询的好示例。

以下是一些我不确定如何参数化的查询:

1、参数用于列名和别名;参数由两个变量组成:

    selQueryBldr.AppendFormat("SELECT * FROM {0} {1} 
    INNER JOIN ColChange CC ON CC.TableRecordID = {1}.{2} and CC.EntityID='{3}'",
    entity.StageTableName, stageTableAlias, entity.PrimaryKey, entity.EntityID);

2、多个SQL IN子句中使用相同的参数

SQL查询:

      SELECT A.TablePrefix ...
      FROM Entity E
      INNER JOIN App A
      ON A.AppID = E.AppID
      WHERE E.AppID in (#APPIDS#)

      UNION

      SELECT A.TablePrefix ...
      FROM EntityB EB
      INNER JOIN App A
      ON A.AppID = EB.AppID
      WHERE EB.AppID in (#APPIDS#)

目前,该参数是通过使用 String.Replace() 方法在代码中添加的:

    sqlQuery = sqlQuery.Replace("#APPIDS#",idList);

3、使用变量作为参数名和参数值:

    StringBuilder dataQuery = new StringBuilder("Select * from {0} WHERE {1}='{2}'",
    tableName, primaryKey[0], changeRow["TableRecordID"]);

4.变量使用了unicode参数的一部分:

    sSQL = string.Format("SELECT name FROM sysobjects WHERE id = object_id(N'[dbo].[{0}]')",
    sSPName);

另外,所有这些示例都使用 OleDb 类(OleDbConnection/OleDbCommand 等),因此据我了解,此处不能使用命名参数。


不同的后端允许(或不允许)命名参数或“?”参数的占位符,所以你要做的就是构建你的查询,比如

OleDbCommand oCmd = new OleDbCommand( YourConnection, "select * from someTable where yourColumn = ? and otherColumn = ?" );

oCmd.Parameters.AddWithValue( "parm1", YourVariable.FormattedHoweverNeeded );
oCmd.Parameters.AddWithValue( "parm2", anotherVariable.FormattedHoweverNeeded );

如果列需要字符串,请确保是字符串。如果需要数字(int、double、float 等),也保留该类型,或其他(日期/时间等)

请注意...如果不执行命名参数(就像我使用“?”占位符一样),则必须按照与“?”相同的顺序添加参数。被放置在 SQL 命令中。

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

如何参数化复杂的 OleDB 查询? 的相关文章

  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi
  • 可选参数“必须是编译时常量”

    我有一个类分为两个部分文件 如下所示 public partial class PersonRepository BaseRepository
  • 浏览器收集哪些值作为回发数据?

    当页面被发送回服务器时 浏览器收集每个控件的当前值并将其粘贴到一个字符串中 然后 该回发数据通过 HTTP POST 发送回服务器 Q1 除了控件的 Text 属性和 SelectedIndexchanged 因此除了用户输入数据 之外 控
  • 隐形打开的弹出窗口

    第二天就解决这个问题 要重现 请创建新的 WPF 应用程序 xaml
  • C# ConfigurationManager 从 app.config 检索错误的连接字符串

    我有一个简单的 WinForms 应用程序 它最终将成为一个游戏 现在 我正在研究它的数据访问层 但遇到了障碍 我创建了一个单独的项目 名为DataAccess在其中 我创建了一个本地 mdfSQL Server 数据库文件 我还创建了一个
  • 获取每月第二个星期二的日期

    有没有办法使用 T SQL 语法找出每月第二个星期二的日期 例如 三月是十二号 四月是九号 您可以通过此方法查找 2013 年所有 第二个星期二 select dateadd day 8 datediff day 1 dateadd mon
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • 使用 Microsoft Graph 创建用户

    如何使用 Microsoft graph 创建用户 因为我在保存过程中遇到了权限失败的问题 我确实有几个问题 在图中调用创建用户 API 将在哪里创建用户 是在 Azure AD 还是其他地方 我尝试通过传递 json 和必需的标头来调用创
  • 从 ef core 的子集合中删除一些项目

    我有一个父表和子表 其中父表与子表具有一对多关系 我想删除一些子项 并且希望父项的子集合反映该更改 如果我使用删除选定的子项RemoveRange 那么子集合不会更新 如果我使用Remove从子集合中删除子集合然后 显然 它不如使用效率高R
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一
  • 为什么我的 ITexthandler 不工作?我正在尝试将 XML 解析为 ITextSharp 文档

    我正在使用 Visual Developer 2010 MVC 3 c 我正在尝试将 XML 解析为 iTextSharp 文档 如下所示 ITextHandler textHandler new ITextHandler doc text
  • .NET 的 HttpWebResponse 是否会自动解压缩 GZiped 和 Deflated 响应?

    我正在尝试执行一个接受压缩响应的请求 var request HttpWebRequest HttpWebRequest Create requestUri request Headers Add HttpRequestHeader Acc
  • C# - 命名空间内的类型声明

    在命名空间内而不是在类中声明类型的可能用途是什么 For ex namespace Test public delegate void Ispossible 这是有效的并且不会产生任何编译错误 但我无法想象为什么我们会以这种方式声明它而不是
  • Unity 2.0 和处理 IDisposable 类型(特别是使用 PerThreadLifetimeManager)

    我知道类似的问题被问过好几次 例如 here https stackoverflow com questions 987761 how do you reconcile idisposable and ioc here https stac
  • 停止 TcpListener 的正确方法

    我目前正在使用 TcpListener 来处理传入连接 每个连接都有一个线程用于处理通信 然后关闭该单个连接 代码如下 TcpListener listener new TcpListener IPAddress Any Port Syst
  • printf 参数不足

    我的问题是关于缺少参数的 printf 之后的行为 printf s blah blah d int integer was given as argument and not int written 我已经知道 如果格式参数不足 则行为是
  • Intel 和 AMD 处理器有相同的汇编程序吗?

    C语言被用来编写Unix以实现可移植性 使用不同编译器编译的同一个C语言程序会产生不同的机器指令 为什么 Windows 操作系统能够在两者上运行Intel https en wikipedia org wiki Intel and AMD
  • 无效的模板相关成员函数模板推导 - 认为我正在尝试使用 std::set

    我有一个继承自基类模板的类模板 基类模板有一个数据成员和一个成员函数模板 我想从我的超类中调用它 我知道为了消除对成员函数模板的调用的歧义 我必须使用template关键字 我必须明确引用this在超级班里 this gt base mem
  • 计算两个日期之间的工作日数?

    在C 中 如何计算business 或工作日 两个日期之间的天数 我以前曾经遇到过这样的任务 并且我已经找到了解决方案 当可以避免的时候 我会避免列举其间的所有日子 这里就是这种情况 正如我在上面的一个答案中看到的那样 我什至没有提到创建一
  • 如何设置 Swashbuckle 与 Microsoft.AspNetCore.Mvc.Versioning

    我们有asp net core webapi 我们添加了Microsoft AspNetCore Mvc Versioning and Swashbuckle拥有招摇的用户界面 我们将控制器指定为 ApiVersion 1 0 Route

随机推荐

  • Android 4.x 方向与phonegap

    我有一个带有phonegap 1 3和jquerymobile 1 0的网络应用程序 它可以在除4 0之外的所有Android版本上运行良好 事实上 如果我改变方向 应用程序会强制关闭 没有错误 也没有 据我所知 logcat 错误 如果我
  • 如何在android中排序List

    List
  • 使用 writeLines 时避免文件末尾出现空行

    在 R 中 是否可以避免 writeLines 生成的文本文件末尾出现空行 如果没有 是否有其他方法可以从 R 中生成文本文件而末尾不带空行 没有空行 R 正确地 以以下方式结束每一行 n or r n 在 Windows 上 换句话说 文
  • C# 循环遍历文件夹直到找到正确的文件

    我正在运行一个批处理来更新我的 sql 表 我正在使用 Windows 调度程序来运行批处理文件 每天文件在不同的时间到达 有时它们在我的计划时间之后进入 因此当文件夹中的计划任务之前没有文件时 批处理文件不会运行 我想创建一个 C 程序
  • 将一个表中的类别附加到另一个 MySQL 中的条目

    我有一个数据库 它接受用户提交的数据 我想将这些条目分组到大约 10 个类别中的一个或多个类别中 例如 您将您的条目添加到我的网站 说这一切都与您的业务 汽车代客服务 有关 我为您提供机会将您的条目分类为任意 10 个固定类别 汽车 移动服
  • 如何制作对象的防御性副本?

    如何制作包含不可变对象中的可变字段的可变对象的防御性副本 class ImmutableObject private final MutableObject immutable field ImmutableObject MutableOb
  • 如何正确播种随机数生成器

    我正在尝试在 Go 中生成一个随机字符串 这是我到目前为止编写的代码 package main import bytes fmt math rand time func main fmt Println randomString 10 fu
  • 使用 JQuery 在第一个表行之后插入新表行

    我有一张桌子id table 然后第一行id headings 现在我需要在标题行之后直接插入一个新行 我使用下面的代码 headings after table prepend tr tr 但我想我在这里做错了什么 Maybe table
  • SQL查询获取指定范围内的所有数据

    我有一个包含三列的表 报价 id product id 和价格 offer id integer product id integer price decimal 我想触发一个 SQL 查询 它将返回某个价格范围内的报价数量 范围应为 0
  • 不适用于

    我有一个模板 其中
  • 如何将图像转换为灰度而不丢失透明度?

    我在将带有一些透明像素的彩色图像转换为灰度时遇到问题 我已经在该网站上搜索并找到了相关问题 但我无法用来解决我的问题 我定义了一个方法 convertType 如下所示 attempts to convert the type of the
  • Polymer-AngularJS 双向数据绑定

    我创建了一些自定义元素Polymer 我们称之为 x input 它看起来像这样
  • 如何使用 Google Translate API 翻译 Microsoft Excel 中的文本

    我希望这里有人可以帮助我使用谷歌翻译 API 我有一个大约有 80k 行的 Excel 文件 我正在尝试构建一个宏 它可以翻译列中除第一行之外的所有内容 作为示例 我在 Microsoft Excel 中有六列 如下所示 Excel 列标题
  • 不同浏览器的字体大小差异很大

    Update 添加了简单的测试示例http jsfiddle net 7UhrW 1 使用normalize css Chrome WebKit 和 Firefox 有不同的渲染引擎 它们以不同的方式渲染字体 特别是不同尺寸的字体 这并不太
  • 仅显示一次 RDLC 标头

    通常在 RDLC 报告中 如果您使用标题 它将在每个页面上重复 如果我只想在第一页上显示标题而不显示其余部分 有什么解决方案 有什么方法可以告诉哪些页面的标题可见 您不能使用页眉来执行此操作 为此 您需要将标题控件移至正文部分
  • 按中心裁剪图像

    我有一个大小为 218 178 的 PNG 图像 我正在使用 matplotlib 的函数 imread 将其转换为 ndarray 我想裁剪它以获得图像的中间 64X64 部分 我尝试用 np reshape 进行裁剪 但没有意义 我也尝
  • 存储软件文档的最佳方式是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 一个明显的答案是 内部维基
  • 动态 Sass 变量

    有什么方法可以根据 html 元素上的类设置颜色变量吗 或者还有其他方法可以实现同样的目标吗 html sunrise accent 37CCBD base 3E4653 flat eceef1 moonlight accent 18c b
  • SSIS 转换——将一列拆分为多列

    我试图找出如何拆分表中的一列 并在将结果导出到 CSV 文件后将其拆分为三列 例如 我有一个名为 fullpatentname 的字段 它以以下文本格式列出 Smith John C 期望将其分为三个单独的列 Smith John C 我很
  • 如何参数化复杂的 OleDB 查询?

    我正在尝试重构一些使用字符串连接来创建 SQL 命令的代码 这使得它容易受到 SQL 注入的攻击 基本上我想做的就是更换所有string sqlToExecute String Format 带有 SQL 命令和 OleDB 参数列表的语句