c# - Several nested if conditions -


i have 5 conditions have check (i.e user want search using field or not). there 4 combo boxes , 1 text field. user can search using field or multiple fields please. check field user selected have constructed several if , else if statements. when doing 2 conditions realized how tedious task 5 conditions there better way this?

if  (cmbagent.text=="") {     if (cmbdegree.text=="")     {         oledbdataadapter da = new oledbdataadapter("select * universitydata", connection);     }     else     {        oledbdataadapter da = new oledbdataadapter("select * universitydata expertise '%" + cmbdegree.text + "%' ", connection);     } } else if(cmbdegree.text=="") {     oledbdataadapter da = new oledbdataadapter("select * universitydata sourceofcontact '%"+ cmbagent.text + "%' ", connection); } else {     oledbdataadapter da = new oledbdataadapter("select * universitydata sourceofcontact '%" + cmbagent.text + "%' , expertise '%" + cmbdegree .text + "%' ", connection); } 

what if user needs/wants enters several values ?
can build query dynamically.

by way, should use query parameters prevent sql injection.

// "where 1=1" allows concatenate "and xxx" // instead of testing if there fulfilled conditions before var query = "select * universitydata 1 = 1";  var parameters = new dictionary<string, string>();  if (txtdegree.text != "") {    query += " , expertise '%' + ? + '%' ";    parameters.add("degree", txtdegree.text); }  if(txtagent.text != "") {     query += " , sourceofcontact '%' + ? + '%' ";     parameters.add("agent", txtagent.text); }  oledbdataadapter da = new oledbdataadapter(query, connection); // add parameters foreach (var p in parameters) {     da.selectcommande.parameters.add(p.key, oledbtype.varchar, p.value); } 

note oledb doesn't support named parameters. if can, consider switching sql commands , adapters.

by way, if ever can/want use linq build queries (through entity framework instance, or other orm), can it, too, since linq , entity framework late-bound (meaning query not executed until results read).

// build query var results = ud in context.universitydata               select ud;  if (txtdegree.text != string.empty) {     results = ud in results               ud.expertise.contains(txtdegree.text)               select ud; }  if (txtagent.text != string.empty) {     results = ud in results               ud.sourceofcontact.contains(txtagent.text)               select ud; }  // use results mycontrol.datasource = results.tolist(); // tolist() call calls query 

Comments

Popular posts from this blog

How to connect android app to App engine -

gcc - MinGW's ld cannot perform PE operations on non PE output file -

php - display validation error message next to the textbox in codeigniter -