Prova a utilizzare una query parametrizzata ecco un link http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/
Inoltre, non utilizzare OpenQuery... usa this per eseguire select
SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno
Altri articoli che descrivono alcune delle tue opzioni:
http://support.microsoft.com/kb/314520
Qual è la sintassi T-SQL per connettersi a un altro SQL Server?
Modificato
Nota:la tua domanda originale riguardava le query distribuite e i server collegati. Questa nuova istruzione non fa riferimento a una query distribuita. Posso solo presumere che ora ti stai connettendo direttamente al database. Ecco un esempio che dovrebbe funzionare. Ecco un altro sito di riferimento per l'utilizzo di SqlCommand.Parameters
SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con);
cmd.Parameters.Add("@ref", SqlDbType.Int);
cmd.Parameters["@ref"] = 34;
Modificato:
Ok Jamie taylor cercherò di rispondere di nuovo alla tua domanda.
Stai usando OpenQuery perché probabilmente stai usando un DB collegato
Fondamentalmente il problema è che il metodo OpenQuery accetta una stringa che non puoi passare una variabile come parte della stringa che hai inviato a OpenQuery.
Puoi invece formattare la tua query in questo modo. La notazione segue nomeserver.nomedatabase.nomeschema.nometabella. Se stai utilizzando un server collegato tramite odbc, ometti il nome del database e il nome dello schema, come illustrato di seguito
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