Опитайте да използвате параметризирана заявка, тук има връзка http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/
Също така, не използвайте OpenQuery... използвайте this, за да стартирате select
SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno
Още статии, описващи някои от вашите опции:
http://support.microsoft.com/kb/314520
Какъв е синтаксисът на T-SQL за свързване с друг SQL сървър?
Редактирано
Забележка:Вашият първоначален въпрос беше за разпределени заявки и свързани сървъри. Този нов израз не препраща към разпределена заявка. Мога само да предположа, че сега се свързвате директно с базата данни. Ето един пример, който трябва да работи. Ето още един референтен сайт за използване на SqlCommand.Parameters
SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con);
cmd.Parameters.Add("@ref", SqlDbType.Int);
cmd.Parameters["@ref"] = 34;
Редактирано:
Добре, Джейми Тейлър, ще се опитам отново да отговоря на въпроса ти.
Използвате OpenQuery, защото вероятно използвате свързана DB
Основно проблемът е, че методът OpenQuery приема низ, който не можете да предадете променлива като част от низа, който сте изпратили до OpenQuery.
Вместо това можете да форматирате заявката си по този начин. Нотацията следва servername.databasename.schemaname.tablename. Ако използвате свързан сървър чрез odbc, тогава пропуснете име на база данни и име на схема, както е показано по-долу
Dim conn As SqlConnection = New SqlConnection("your SQL Connection String")
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandText = "Select * db...table where investor = @investor"
Dim parameter As SqlParameter = cmd.CreateParameter()
parameter.DbType = SqlDbType.Int
parameter.ParameterName = "@investor"
parameter.Direction = ParameterDirection.Input
parameter.Value = 34