sql >> データベース >  >> RDS >> Sqlserver

ASP.NetでのSQLインジェクションの防止

    ここでパラメーター化されたクエリを使用してみてくださいhttp://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/

    また、OpenQueryを使用しないでください...これを使用してselectを実行します

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

    いくつかのオプションを説明するその他の記事:

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

    別のSQLServerに接続するためのT-SQL構文は何ですか?

    編集済み

    注:最初の質問は、分散クエリとリンクサーバーについて尋ねていました。この新しいステートメントは、分散クエリを参照していません。現在、データベースに直接接続していると想定できます。動作するはずの例を次に示します。これは、SqlCommand.Parameters

    を使用するための別のリファレンスサイトです。
    SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con); 
    cmd.Parameters.Add("@ref", SqlDbType.Int);
    cmd.Parameters["@ref"] = 34;
    

    編集済み:

    ジェイミーテイラー、もう一度あなたの質問に答えようと思います。

    リンクされたDBを使用している可能性があるため、OpenQueryを使用しています

    基本的に問題は、OpenQueryメソッドが、OpenQueryに送信した文字列の一部として変数を渡すことができない文字列を受け取ることです。

    代わりに、このようにクエリをフォーマットできます。表記はservername.databasename.schemaname.tablenameの後に続きます。 odbcを介してリンクサーバーを使用している場合は、以下に示すように、databasenameとschemanameを省略します

        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
    


    1. ハングしたクエリを終了します(トランザクションでアイドル状態)

    2. MySQL厳密モードを無効にする方法

    3. 悪いスタンバイ

    4. org.postgresql.util.PSQLException:列インデックスが範囲外です:3、列数:2