Essayez d'utiliser une requête paramétrée ici est un lien http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/
Aussi, n'utilisez pas OpenQuery... utilisez ceci pour exécuter la sélection
SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno
Plus d'articles décrivant certaines de vos options :
http://support.microsoft.com/kb/314520
Quelle est la syntaxe T-SQL pour se connecter à un autre SQL Server ?
Modifié
Remarque :Votre question initiale concernait les requêtes distribuées et les serveurs liés. Cette nouvelle instruction ne fait pas référence à une requête distribuée. Je ne peux que supposer que vous vous connectez directement à la base de données maintenant. Voici un exemple qui devrait fonctionner.Voici un autre site de référence pour l'utilisation de SqlCommand.Parameters
SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con);
cmd.Parameters.Add("@ref", SqlDbType.Int);
cmd.Parameters["@ref"] = 34;
Modifié :
Ok Jamie Taylor, je vais essayer de répondre à nouveau à votre question.
Vous utilisez OpenQuery car vous utilisez probablement une base de données liée
Fondamentalement, le problème est que la méthode OpenQuery prend une chaîne que vous ne pouvez pas transmettre à une variable dans le cadre de la chaîne que vous avez envoyée à OpenQuery.
Vous pouvez formater votre requête comme ceci à la place. La notation suit servername.databasename.schemaname.tablename. Si vous utilisez un serveur lié via odbc, omettez le nom de la base de données et le nom du schéma, comme illustré ci-dessous
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