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
Post a Comment