sql >> Base de Datos >  >> RDS >> Sqlserver

Prevención de inyección SQL en ASP.Net

Intente usar una consulta parametrizada aquí hay un enlace http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/

Además, no use OpenQuery... use this para ejecutar la selección

SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno

Más artículos que describen algunas de sus opciones:

http://support.microsoft.com/kb/314520

¿Cuál es la sintaxis de T-SQL para conectarse a otro servidor SQL?

Editado

Nota:Su pregunta original se refería a consultas distribuidas y servidores vinculados. Esta nueva declaración no hace referencia a una consulta distribuida. Solo puedo suponer que ahora se está conectando directamente a la base de datos. Aquí hay un ejemplo que debería funcionar. Aquí hay otro sitio de referencia para usar SqlCommand.Parameters

SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con); 
cmd.Parameters.Add("@ref", SqlDbType.Int);
cmd.Parameters["@ref"] = 34;

Editado:

Vale, Jamie Taylor, intentaré responder a tu pregunta de nuevo.

Está utilizando OpenQuery porque probablemente esté utilizando una base de datos vinculada

Básicamente, el problema es que el Método OpenQuery toma una cadena que no puede pasar una variable como parte de la cadena que envió a OpenQuery.

En su lugar, puede formatear su consulta de esta manera. La notación sigue a servername.databasename.schemanname.tablename. Si está utilizando un servidor vinculado a través de odbc, omita el nombre de la base de datos y el nombre del esquema, como se ilustra a continuación

    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