ODACに接続するC#コードを書いています。クエリにエラーはなかったと思いますが、このエラーが発生しました。解決方法がわかりません。
これは私の質問です
comm.CommandText = "SELECT * FROM ZAEDBA WHERE USER_ID = '" + login_id +
"' AND APPID = '" + app_id + "' ;";
ここで何が悪いのか誰かが理解できますか?
ODACに接続するC#コードを書いています。クエリにエラーはなかったと思いますが、このエラーが発生しました。解決方法がわかりません。
これは私の質問です
comm.CommandText = "SELECT * FROM ZAEDBA WHERE USER_ID = '" + login_id +
"' AND APPID = '" + app_id + "' ;";
ここで何が悪いのか誰かが理解できますか?
クエリはSQLインジェクションと呼ばれるセキュリティの問題に対して脆弱です!
文字列(一部のSQL、一部のパラメータ)からクエリを作成するために文字列連結を使用しないでください...常にパラメータ化されたクエリを使用してください...
サンプルコード:
comm.BindByName = true;
comm.CommandText = "SELECT * FROM ZAEDBA WHERE USER_ID = :login_id AND APPID = :app_id";
comm.Parameters.AddWithValue ("login_id", login_id);
comm.Parameters.AddWithValue ("app_id", app_id);
;
SQLコマンドにaがあるのはなぜですか? これを試して;
comm.CommandText = "SELECT * FROM ZAEDBA WHERE USER_ID = '" + login_id + "' AND APPID = '" + app_id "';
ところで、常にパラメーター化されたクエリを使用する必要があります。これは明らかにSQLインジェクションの可能性があります。クエリには、次のように使用します。
string commandText = "SELECT * FROM ZAEDBA WHERE USER_ID = @login_id " + AND
+ "WHERE APPID = @app_id;";
command.Parameters.Add("@login_id", SqlDbType.Int);
command.Parameters["@login_id"].Value = login_id;
command.Parameters.Add("@app_id", SqlDbType.Int);
command.Parameters["@app_id"].Value = app_id;