我目前正在将Controller类与数据访问层类(UserDAL类)结合使用,以便对数据库进行更改。但是我知道我的代码是可以使用的,因为我没有使用参数化查询。
我从例子中看到了如何使用命令对象来使用查询。但是我使用的是OracleDataAdapter,它看起来有点不同。它也与参数化的实际值不同,如下面的代码部分所示:
控制器代码,其中三个字符串从用户输入的字段填充:
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对象才能执行此操作?
答案 0 :(得分:2)
您可以像这样使用OracleDataAdapterüithOracleCommand:
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);
}