gpt4 book ai didi

c# - 使用 OracleDataAdapter 的参数化查询

转载 作者:搜寻专家 更新时间:2023-10-30 22:01:34 26 4
gpt4 key购买 nike

我目前正在结合使用 Controller 类和数据访问层类(UserDAL 类)来更改数据库。但是我知道我的代码很脆弱,因为我没有使用参数化查询。

我已经从示例中了解到如何使用命令对象来使用查询。但是,我使用的是 OracleDataAdapter,它的行为似乎有点不同。它也与将被参数化的实际值位于不同的类中,如以下代码部分所示:

Controller 代码,其中三个字符串由用户输入的字段填充:

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 对象才能执行此操作?

最佳答案

您可以像这样将 OracleDataAdapter 与 OracleCommand 一起使用:

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);
}

关于c# - 使用 OracleDataAdapter 的参数化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11843667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com