c# - 如何将参数传递给 C# 中的直通查询?

标签 c# sql-server oracle openquery

我有一个 C# 程序,它使用 OPENQUERY() 从链接服务器中进行选择。此传递查询接受一个参数。为了防止 SQL 注入(inject),我想以类似于 SqlCommand.Parameters.AddWithValue 的方式传递此参数,但是 OPENQUERY() 不接受变量。

到目前为止,我一直在使用 SqlCommand 将参数传递给针对 SQL Server 中的表运行的查询。但是我还需要访问 Oracle 链接服务器。有什么方法可以添加这个参数而不用将它连接成一个字符串吗?

string query = "SELECT * FROM OPENQUERY(linked_server, 
'SELECT * FROM User.Table WHERE col1 = @parameter1 ')";

编辑: 我没有在远程 Oracle 服务器上创建存储过程的权限。因此,对存储过程执行 Sp_executesql 对我来说似乎不是直接的答案。

最佳答案

有一个 EXEC 调用,特别适用于链接服务器(参见 docs ):

EXEC( 'SELECT * FROM User.Table WHERE col1 = ?', '<param>' ) AT linked_server

你可以把所有这些都放在 string query 中,这样你就可以安全地避免 SQL 注入(inject)到 SELECT 语句中,尽管你可能会得到 的语法错误>EXEC 语句。

关于c# - 如何将参数传递给 C# 中的直通查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49931488/

相关文章:

c# - 错误 "fetch out of sequence"从 C# 中的 Oracle 函数返回表,其中函数使用 dblink 到 SQL Server

sql - 表变量批量插入的 SQL 语句有什么问题

c++ - 如何知道Windows XP 或7 中是否安装了MSSql Server?

html - 在 html 电子邮件中嵌入图像

oracle - 如何在 listagg 中使用 chr(10)?

c# - 如何在不使用 visual studio 的情况下编译和运行 c# 程序?

c# - 如何在域模型中使用 AspNet.Identity

c# - 在 C# 中使用可访问性修饰符继承属性

sql - 如何创建可以在 Oracle 12c 中创建用户的用户?

c# - 表格嵌套在 itextsharp 中的 PDFPCELL 中