質問: i THEN i + 1 "; } sqlQuery += "WHERE id IN (1,2,3,4,5,6,7,8,9,10)"; await _context.Database.ExecuteSqlCommandAsync(sqlQuery); ``` このクエリをサニタイズまたはパラメータ化するにはどうすればよいですか?どんな助けも感謝します!
回答: ~~最初の例は、SQLインジェクションの可能性があるため、クエリをパラメーター化するための*悪い*方法です。C#の補間文字列機能は、SQLコマンド専用に設定されていません。さまざまな用途を想定しているため、SQLサニタイズを実装していません。~~ パラメーターが適切に`SqlCommand`ように、常に`SqlCommand`クラスとその`Parameters`プロパティを使用する必要があります。 更新:補間された文字列は暗黙的にSQLコマンドとして扱われ、EF Coreでその特定のコンストラクターを使用すると、インターポランはサニタイズされます。 ただし、この場合、クエリを単一のテンプレートリテラルとして表現できないため、@パラメータ表記を使用して文字列を作成し、 `SqlCommand`を使用してパラメータを置換して、それらが`SqlCommand`れるようにする必要があります。 また、多数の文字列を連結する必要がある場合、+ =は非常に非効率的な方法です。速度を上げるには、代わりに`StringBuilder`を使用する必要があります。