Versuchen Sie es mit einer parametrisierten Abfrage, hier ist ein Link http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/
Verwenden Sie auch nicht OpenQuery ... verwenden Sie this, um die Auswahl auszuführen
SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno
Weitere Artikel, in denen einige Ihrer Optionen beschrieben werden:
http://support.microsoft.com/kb/314520
Wie lautet die T-SQL-Syntax, um eine Verbindung zu einem anderen SQL-Server herzustellen?
Bearbeitet
Hinweis:Ihre ursprüngliche Frage bezog sich auf verteilte Abfragen und Verbindungsserver. Diese neue Anweisung verweist nicht auf eine verteilte Abfrage. Ich kann nur davon ausgehen, dass Sie sich jetzt direkt mit der Datenbank verbinden. Hier ist ein Beispiel, das funktionieren sollte. Hier ist eine weitere Referenzseite für die Verwendung von SqlCommand.Parameters
SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con);
cmd.Parameters.Add("@ref", SqlDbType.Int);
cmd.Parameters["@ref"] = 34;
Bearbeitet:
Ok Jamie Taylor, ich werde versuchen, Ihre Frage noch einmal zu beantworten.
Sie verwenden OpenQuery, weil Sie wahrscheinlich eine verknüpfte DB verwenden
Grundsätzlich besteht das Problem darin, dass die OpenQuery-Methode eine Zeichenfolge verwendet, an die Sie keine Variable als Teil der Zeichenfolge übergeben können, die Sie an OpenQuery gesendet haben.
Sie können Ihre Abfrage stattdessen so formatieren. Die Notation folgt Servername.Datenbankname.Schemaname.Tabellenname. Wenn Sie einen Verbindungsserver über odbc verwenden, lassen Sie den Datenbanknamen und den Schemanamen weg, wie unten dargestellt
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