Spróbuj użyć sparametryzowanego zapytania, tutaj jest łącze http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/
Nie używaj też OpenQuery... użyj this do uruchomienia wyboru
SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno
Więcej artykułów opisujących niektóre opcje:
http://support.microsoft.com/kb/314520
Jaka jest składnia T-SQL do łączenia się z innym serwerem SQL?
Edytowane
Uwaga:Twoje pierwotne pytanie dotyczyło zapytań rozproszonych i serwerów połączonych. Ta nowa instrukcja nie odwołuje się do zapytania rozproszonego. Mogę tylko założyć, że teraz łączysz się bezpośrednio z bazą danych. Oto przykład, który powinien działać. Oto kolejna witryna referencyjna dotycząca używania SqlCommand.Parameters
SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con);
cmd.Parameters.Add("@ref", SqlDbType.Int);
cmd.Parameters["@ref"] = 34;
Edytowane:
Ok Jamie Taylor, spróbuję jeszcze raz odpowiedzieć na twoje pytanie.
Używasz OpenQuery, ponieważ prawdopodobnie używasz połączonej bazy danych
Zasadniczo problem polega na tym, że metoda OpenQuery pobiera ciąg, do którego nie można przekazać zmiennej, jako część ciągu wysłanego do OpenQuery.
Zamiast tego możesz sformatować zapytanie w ten sposób. Notacja następuje po nazwa_serwera.nazwa_bazy_danych.nazwaschematu.nazwa_tabeli. Jeśli używasz połączonego serwera przez ODBC, pomiń nazwę bazy danych i nazwę schematu, jak pokazano poniżej
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