我有一个 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/