Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Empêcher l'injection SQL dans ASP.Net

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