2012-08-07 5 views
1

J'utilise actuellement une classe Controller en conjonction avec une classe de couche d'accès aux données (classe UserDAL) afin de modifier une base de données. Cependant, je suis conscient que mon code est vunerable car je n'utilise pas de requêtes paramétrées.Requêtes paramétrées utilisant OracleDataAdapter

J'ai vu à partir d'exemples comment utiliser les requêtes en utilisant des objets de commande. Cependant j'utilise un OracleDataAdapter qui semble se comporter un peu différemment. Il est également dans une classe différente des valeurs réelles qui seraient paramétrés comme on peut le voir ici dans les sections suivantes du code:

code du contrôleur, où les trois chaînes sont remplies de champs entrée de l'utilisateur:

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

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

Comment puis-je utiliser des requêtes paramterized avec l'objet OracleDataAdapter et je vais devoir fusionner les classes ci-dessus ou même passer les champs dans l'objet UserRoleDAL afin de le faire?

+0

[OracleDataAdapter] (http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracledataadapter (v = vs .100) .aspx) est maintenant obsolète, pourquoi l'utilisez-vous encore? – Habib

+0

@habib Que devrais-je utiliser à la place? Je me connecte à un db Oracle en utilisant ODP.Net – Sperick

+0

vous pouvez utiliser une OracleCommand avec des paramètres et l'utiliser avec OracleDataAdapter. Je ne suis pas sûr du remplacement d'OracleDataAdapter – Habib

Répondre

2

Vous pouvez utiliser OracleDataAdapter üith OracleCommand comme ceci:

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