2012-08-07 224 views
1

我目前正在將一個Controller類與數據訪問層類(UserDAL類)結合使用,以便對數據庫進行更改。但是我知道我的代碼是可調的,因爲我沒有使用參數化查詢。使用OracleDataAdapter的參數化查詢

我從excamples看過如何使用命令對象來查詢。但是,我正在使用一個似乎有點不同的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(); 
    } 
} 

如何使用paramterized查詢與OracleDataAdapter對象,我需要合併上述課程或甚至穿過田野到UserRoleDAL對象才能做到這一點?

+0

[OracleDataAdapter](http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracledataadapter(V = VS .100).aspx)現在已經過時,你爲什麼還在使用它? – Habib 2012-08-07 10:13:06

+0

@habib我應該使用什麼呢?我使用ODP.Net – Sperick 2012-08-07 10:24:33

+0

連接到Oracle數據庫,您可以使用具有參數的OracleCommand並將其用於OracleDataAdapter。我不確定更換OracleDataAdapter – Habib 2012-08-07 10:27:46

回答

2

可以使用OracleDataAdapterüith的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); 
}