Zkuste použít parametrizovaný dotaz zde je odkaz http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/
Také nepoužívejte OpenQuery... použijte toto ke spuštění select
SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno
Další články popisující některé z vašich možností:
http://support.microsoft.com/kb/314520
Jaká je syntaxe T-SQL pro připojení k jinému serveru SQL?
Upraveno
Poznámka:Vaše původní otázka se týkala distribuovaných dotazů a propojených serverů. Tento nový příkaz neodkazuje na distribuovaný dotaz. Mohu jen předpokládat, že se nyní připojujete přímo k databázi. Zde je příklad, který by měl fungovat. Zde je další referenční stránka pro použití SqlCommand.Parameters
SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con);
cmd.Parameters.Add("@ref", SqlDbType.Int);
cmd.Parameters["@ref"] = 34;
Upraveno:
Ok, Jamie Taylore, pokusím se znovu odpovědět na vaši otázku.
OpenQuery používáte, protože pravděpodobně používáte propojenou DB
Problém je v zásadě v tom, že metoda OpenQuery bere řetězec, který nemůžete předat proměnnou jako součást řetězce, který jste odeslali do OpenQuery.
Místo toho můžete dotaz naformátovat takto. Zápis následuje servername.databasename.schemananame.tablename. Pokud používáte propojený server přes odbc, vynechejte název databáze a název schématu, jak je znázorněno níže
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