
更新
有人有什么想法,最好的方法来确保我的查询免受SQL注入的侵扰,而不会遇到我遇到的错误吗?
更新
我现在有了它aspnet 防sql注入 代码,因此它无需参数位即可工作. 这是我更新的源代码. 为什么不添加参数值的任何想法?

Dim conn As SqlConnection = New SqlConnection("server='server1'; user id='w'; password='w'; database='w'; pooling='false'")
conn.Open()
Dim query As New SqlCommand("Select * from openquery (db,'Select * from table where investor = @investor ') ",conn)
query.Parameters.AddWithValue("@investor",69836)
dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()
它是这样的
Dim conn As SqlConnection = New SqlConnection("server='server1'; user id='w'; password='w'; database='w'; pooling='false'")
conn.Open()
Dim query As New SqlCommand("Select * from openquery (db,'Select * from table where investor = 69836') ",conn)
dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()
我得到的错误是这个

An error occurred while preparing a query for execution against OLE DB provider 'MSDASQL'.
这是因为它没有将@investor替换为69836
有什么想法吗?
解决方案

这就是我解决问题的方式
Dim conn As SqlConnection = New SqlConnection("server='h'; user id='w'; password='w'; database='w'; pooling='false'")
conn.Open()
Dim query As New SqlCommand("DECLARE @investor varchar(10),@sql varchar(1000) Select @investor = 69836 select @sql = 'SELECT * FROM OPENQUERY(db,''SELECT * FROM table WHERE investor = ''''' + @investor + ''''''')' EXEC(@sql)",conn)
dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()
现在aspnet 防sql注入 代码,我可以编写查询而不必担心SQL注入
在这里尝试一个链接

另外,不要使用OpenQuery…使用它来运行选择
SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno
更多描述某些选项的文章:
编辑
注意: 您最初的问题是有关分布式查询和链接服务器的. 此新语句不引用分布式查询. 我只能假设您现在直接连接到. 这是一个应该起作用的例子.
这是另一个可供使用的参考站点
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-212225-1.html
给楼主一个题目
美国佬说保证航行自由