2

現在、データベースに変更を加えるために、コントローラー クラスをデータ アクセス レイヤー クラス (UserDAL クラス) と組み合わせて使用​​しています。ただし、パラメーター化されたクエリを使用していないため、コードが脆弱であることを認識しています。

コマンドオブジェクトを使用してクエリを使用する方法を例から見てきました。ただし、動作が少し異なるように見える OracleDataAdapter を使用しています。また、コードの次のセクションで見られるように、パラメーター化される実際の値とは異なるクラスにあります。

ユーザーが入力したフィールドから 3 つの文字列が入力されるコントローラー コード:

string usrName = mod.UserName;
string role = mod.Role;
string mod.actvInd;


string sql = "UPDATE LD_USER_ROLE" + " SET USERNAME='" + usrName + "', ROLE='" + role + "', ACTIVE_IND='" + actvInd  + "' WHERE USER_ROLE_ID=" + id + "";

UserRoleDAL udl = new UserRoleDAL();
            udl.ExecuteQuery(sql);

UserDAL クラス:

public class UserRoleDAL
{

    private OracleConnection conn;

    public UserRoleDAL()
    {
         string oradb = ConfigurationManager.ConnectionStrings["db_dbConnectionString"].ConnectionString;

        conn = new OracleConnection(oradb);
    }


    public void ExecuteQuery(string sql)
    {
        conn.Open();

        OracleDataAdapter adapter = new OracleDataAdapter(sql, conn);
        DataSet ds = new DataSet();
        adapter.Fill(ds);

        conn.Close();
    }
}

OracleDataAdapter オブジェクトでパラメーター化されたクエリを使用するにはどうすればよいですか? また、これを行うには、上記のクラスをマージするか、フィールドを UserRoleDAL オブジェクトに渡す必要がありますか?

4

1 に答える 1

5

次のように OracleCommand で OracleDataAdapter を使用できます。

public void ExecuteQuery(string usrName, string role, string activeation, int userId)
{
  string sql = "UPDATE LD_USER_ROLE SET USERNAME=:usrName, ROLE=:role, ACTIVE_IND=:actvInd  WHERE USER_ROLE_ID=:id";

    OracleCommand cmd = new OracleCommand(sql, conn);
    cmd.BindByName = true;

    cmd.Parameters.Add("usrName", usrName);
    cmd.Parameters.Add("role", role);
    cmd.Parameters.Add("actvInd", activeation);
    cmd.Parameters.Add("id", userId);

    OracleDataAdapter adapter = new OracleDataAdapter(cmd);
    DataSet ds = new DataSet();
    adapter.Fill(ds);
}
于 2012-08-07T10:33:37.080 に答える