Asp.net 忽略查询中的某些文本框
我在Asp.net 忽略查询中的某些文本框,asp.net,sql,report,Asp.net,Sql,Report,我在btnShowReport\u点击的代码隐藏中有以下代码: SqlDataSource1.SelectParameters.Clear(); SqlDataSource1.SelectParameters.Add("username", txtUsername.Text); SqlDataSource1.SelectParameters.Add("printer", ddlPrinter.Text); SqlDataSource1.SelectParameters.Add("to
btnShowReport\u点击的代码隐藏中有以下代码:
SqlDataSource1.SelectParameters.Clear();
SqlDataSource1.SelectParameters.Add("username", txtUsername.Text);
SqlDataSource1.SelectParameters.Add("printer", ddlPrinter.Text);
SqlDataSource1.SelectParameters.Add("to", Date.convertDateSolar2Gregorian(txtDateFrom_datepicker.Text));
SqlDataSource1.SelectParameters.Add("from", Date.convertDateSolar2Gregorian(txtDateTo_datepicker.Text));
SqlDataSource1.SelectCommand = "SELECT * FROM JobLog WHERE UserName=@username and PrinterName=@printer and TimeSubmitted between @to and @from";
我想当用户没有填写一些文本框时,在查询中,文本框的条件在查询中被忽略。
我希望您理解我的要求。看看这个扩展:
使用此扩展,您可以像这样构建动态sql查询
void DynamicSql(int? categoryId, int? supplierId) {
var query = SQL
.SELECT("ID, Name")
.FROM("Products")
.WHERE()
._If(categoryId.HasValue, "CategoryID = {0}", categoryId)
._If(supplierId.HasValue, "SupplierID = {0}", supplierId)
.ORDER_BY("Name DESC");
}
您可以使用动态生成SQL查询,但是这会使您的代码容易受到SQL注入攻击,您更应该考虑使用在SQL Server中创建存储过程
但是,如果您必须在代码中构建查询,下面是StringBuilder示例:
protected void Page_Load(object sender, EventArgs e)
{
Dictionary<string, string> parameters = new Dictionary<string, string>();
SqlDataSource1.SelectParameters.Clear();
string name = txtName.Text;
string surname = txtSurname.Text;
if (name.Length > 0)
{
SqlDataSource1.SelectParameters.Add("Name", txtName.Text);
parameters.Add("Name", name);
}
if (surname.Length > 0)
{
SqlDataSource1.SelectParameters.Add("Surname", txtSurname.Text);
parameters.Add("Surname", surname);
}
SqlDataSource1.SelectCommand = GetSelectQuery("Customers", parameters);
//Bind SqlDataSource1 to gridview etc...
}
private string GetSelectQuery(string table, Dictionary<string, string> parameters)
{
var query = new System.Text.StringBuilder();
query.Append(String.Format("SELECT * FROM {0}", table));
for (int i = 0; i < parameters.Count; i++)
{
var param = parameters.ElementAt(i);
if (i == 0)
//Add the first parameter
query.Append(String.Format(" WHERE {0}='{1}' ",param.Key, param.Value));
else
query.Append(String.Format(" AND {0}='{1}'", param.Key, param.Value));
}
return query.ToString();
}
受保护的无效页面加载(对象发送方,事件参数e)
{
字典参数=新字典();
SqlDataSource1.SelectParameters.Clear();
字符串名称=txtName.Text;
字符串姓氏=txtnamname.Text;
如果(name.Length>0)
{
SqlDataSource1.SelectParameters.Add(“Name”,txtName.Text);
参数。添加(“名称”,名称);
}
如果(姓氏长度>0)
{
SqlDataSource1.SelectParameters.Add(“姓氏”,txtNames.Text);
参数。添加(“姓氏”,姓氏);
}
SqlDataSource1.SelectCommand=GetSelectQuery(“客户”,参数);
//将SqlDataSource1绑定到gridview等。。。
}
私有字符串GetSelectQuery(字符串表、字典参数)
{
var query=new System.Text.StringBuilder();
Append(String.Format(“SELECT*FROM{0}”,table));
对于(int i=0;i