文字のエスケープを避けるためにパラメータを使用する方法の例をいくつか見てきました。パラメータの使用はSQLインジェクションに対して100%安全ですか?C#ASP.NET SQLパラメータ化
また、いくつかの基本的なクエリ(reguralyが使用されています)とパラメータの実装方法を教えてください。
私がここに来る前に検索したウェブサイトには、あまりにも複雑な例があります。次のように
文字のエスケープを避けるためにパラメータを使用する方法の例をいくつか見てきました。パラメータの使用はSQLインジェクションに対して100%安全ですか?C#ASP.NET SQLパラメータ化
また、いくつかの基本的なクエリ(reguralyが使用されています)とパラメータの実装方法を教えてください。
私がここに来る前に検索したウェブサイトには、あまりにも複雑な例があります。次のように
パラメータ化されたSQLクエリの基本的な例は次のとおりです。
SqlCommand command = new SqlCommand(@"select city from users where username = @username", conn);
SqlParameter param = new SqlParameter();
param.ParameterName = "@username";
param.Value = "abc123"
command.Parameters.Add(param);
conn
はあなたが確立してきましたSqlConnectionオブジェクトです。
@username
は、コマンド実行時に置換されるパラメータ名です。
abc123
は、この例で示した作成済みのユーザー名です。
これは明らかに構成されたシナリオですが、その点が分かります。
短いバージョンとして、あなたは私が何が100%安全であることを述べることを躊躇し
SqlCommand command = new SqlCommand(@"select city from users where username = @username", conn);
command.Parameters.AddWithValue("@username", "value");
OKですが、 '.AddWithValue()'メソッドを使用すると、基本的にADO.NETに使用されているデータ型を推測するように指示します。しかし、時々、それはオフになっています。したがって、私はこれをお勧めしません。**データ型を明示的に**定義する方が良いですし、ADO.NETランタイムによって推測に任せてはいけません。 –
'AddWithValue'のオーバーロードがあると思います。タイプを渡すことができます。 –
使用することができます。また、定期的に使用されるクエリはどういう意味ですか?データモデルに完全に依存します。 –