I have some dropdownlist in my aspx page and I am using the choices from them in my SQL query:
query = "";
DataTable taskData = new DataTable();
connString = @""; //connection string
strClause = "";
if (!blOnLoad)
{
if (ddlTaskName.SelectedIndex > 0) //dropdownlist
{
strClause += " AND CT.ATTR2739 LIKE '%" + ddlTaskName.SelectedItem.Text + "%'";
//strClause += string.format();
}
else
{
strClause += " AND (CT.ATTR2739 LIKE '%' OR CT.ATTR2739 IS NULL)";
}
if (ddlService.SelectedIndex > 0) //dropdownlist
{
strClause += " AND SE.ATTR2821 LIKE '%" + ddlService.SelectedItem.Text + "%'";
}
else
{
strClause += " AND (SE.ATTR2821 LIKE '%' OR SE.ATTR2821 IS NULL)";
}
if (ddlStatus.SelectedIndex > 0) //dropdownlist
{
strClause += " AND CT.ATTR2812 LIKE '%" + ddlStatus.SelectedItem.Text + "%'";
}
else
{
strClause += " AND (CT.ATTR2812 LIKE '%' OR CT.ATTR2812 IS NULL)";
}
if (ddlDueDate.SelectedIndex > 0) //dropdownlist
{
strClause += " AND CONVERT(VARCHAR(14), CT.ATTR2752, 110) LIKE '%" + ddlDueDate.SelectedItem.Text + "%'";
}
else
{
strClause += " AND (CONVERT(VARCHAR(14), CT.ATTR2752, 110) LIKE '%' OR CONVERT(VARCHAR(14), CT.ATTR2752, 110) IS NULL)";
}
if (ddlOwner.SelectedIndex > 0) //dropdownlist
{
strClause += " AND UA.REALNAME LIKE '%" + ddlOwner.SelectedItem.Text + "%'";
}
else
{
strClause += " AND (UA.REALNAME LIKE '%' OR UA.REALNAME IS NULL)";
}
if (ddlClient.SelectedIndex > 0) //dropdownlist
{
strClause += " AND C.ATTR2815 LIKE '%" + ddlClient.SelectedItem.Text + "%'";
}
else
{
strClause += " AND (C.ATTR2815 LIKE '%' OR C.ATTR2815 IS NULL)";
}
if (ddlSite.SelectedIndex > 0) //dropdownlist
{
strClause += " AND SI.ATTR2819 LIKE '%" + ddlSite.SelectedItem.Text + "%'";
}
else
{
strClause += " AND (SI.ATTR2819 LIKE '%' OR SI.ATTR2819 IS NULL)";
}
if (ddlPractice.SelectedIndex > 0) //dropdownlist
{
strClause += " AND PR.ATTR2817 LIKE '%" + ddlPractice.SelectedItem.Text + "%'";
}
else
{
strClause += " AND (PR.ATTR2817 LIKE '%' OR PR.ATTR2817 IS NULL)";
}
if (ddlProvider.SelectedIndex > 0) //dropdownlist
{
strClause += " AND P.ATTR2919 LIKE '%" + ddlProvider.SelectedItem.Text + "%'";
}
else
{
strClause += " AND (P.ATTR2919 LIKE '%' OR P.ATTR2919 IS NULL)";
}
if (ddlTaskName.SelectedIndex == 0 && ddlService.SelectedIndex == 0 && ddlStatus.SelectedIndex == 0 && ddlDueDate.SelectedIndex == 0 && ddlOwner.SelectedIndex == 0 && ddlClient.SelectedIndex == 0 && ddlSite.SelectedIndex == 0 && ddlPractice.SelectedIndex == 0 && ddlProvider.SelectedIndex == 0)
{
query = strMainQuery + " WHERE CT.ACTIVESTATUS = 0";
}
else
{
query = strMainQuery + " WHERE CT.ACTIVESTATUS = 0" + strClause;
}
}
else
{
query = strMainQuery + " WHERE CT.ACTIVESTATUS = 0";
}
using (SqlConnection conn = new SqlConnection(connString))
{
try
{
SqlCommand cmd = new SqlCommand(query, conn);
SqlDataAdapter da = new SqlDataAdapter(query, conn);
myDataSet = new DataSet();
da.Fill(myDataSet);
myDataView = new DataView();
myDataView = myDataSet.Tables[0].DefaultView;
yourTasksGV.DataSource = myDataView;
yourTasksGV.DataBind();
}
}
I am using the dropdownlist text right inside my SQL query which I am sure is prone to SQL injection which I am trying to prevent. I was looking around and found out I can use string.format()
along with .Parameters.AddWithValue();
to ensure there is no SQL injection.
I am not sure how to actually take my code above and change it entirety to use Parameters.
How can I achieve the use of parameters instead of taking the dropdownlist text?
.AddWithValue
- read : Can we stop using AddWithValue() already? to learn why you shouldn't use this \$\endgroup\$