如何安全地将变量传递给ADO.NET查询而不使用参数

时间:2014-09-16 13:49:41

标签: sql-server ado.net openquery

问题是这个 - 我正在使用SQL Server 2012并且我有3个链接的IBM DB2服务器,所以我需要使用OPENQUERY。但是,当我尝试使用时:

command.Parameters.AddWithValue("@param", clientId);

我收到错误:an error occurred while preparing the query..

经过一段时间的调查,我发现如果我在查询中使用具体值而不是尝试使用参数传递它一切正常,所以我得出的结论是问题不在我的查询中或更精确也许它在查询中,但因为我正在尝试使用@param。经过进一步的调查,我得到了这个: OPENQUERY does not accept variables for its arguments. ,我认为这似乎是问题,即使这是从2008年开始,所以信息有点过时了。

然而,最好的选择是找到一种方法来使用OPENQUERY内的参数,但如果在这种情况下真的不可能,那么将变量传递给我的查询的保存方法是什么?

1 个答案:

答案 0 :(得分:0)

如您所知,您无法使用OPENQUERY使用参数。相反,您可以构建SQL查询并嵌入值。所以不是这样:

var sql = "select * from openquery(LinkedServer, 'SELECT * FROM MyTable WHERE tbl.ID = @param')";

你可以这样做:

var someParameter = "SomeValue";
var rawQuery = "select * from openquery(LinkedServer, 'SELECT * FROM MyTable WHERE tbl.ID = ''{0}''')";
var sql = string.Format(rawQuery, someParameter);

但是,您现在需要非常小心SQL注入等事项。