SQL语句进行多条件查询,并解决参数为空的情况。

时间:2021-06-01 22:27:13
小弟对sql不是很精通,要把查出来的项显示在gridview表中 
三个参数分别是姓名,起始时间跟完成时间
需要可以用其中任意一个,或二个,或三个条件进行查询 请问如何写啊 大神给思路

15 个解决方案

#1


QueryEntity query;
var whereSql = new StringBuilder("Where 1=1");
IList<DbParameter> parameters = new List<DbParameter>();
if (!string.IsNullOrEmpty(query.XXX))
{
    whereSql.Append(" And XXX=@XXX");
    parameters.Add(new SqlParameter("XXX", query.XXX));
}

类似这样

#2


拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}

#3


引用 2 楼 Z65443344 的回复:
拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

#4


引用 1 楼 starfd 的回复:
QueryEntity query;
var whereSql = new StringBuilder("Where 1=1");
IList<DbParameter> parameters = new List<DbParameter>();
if (!string.IsNullOrEmpty(query.XXX))
{
    whereSql.Append(" And XXX=@XXX");
    parameters.Add(new SqlParameter("XXX", query.XXX));
}

类似这样

我凑 没看懂

#5


string sql="Select * From Table1 Where 1=1";
if(姓名.TextLength>0)
 sql+=" And 姓名='"+姓名.Text+"'";
//后面条件类似...

#6


引用 3 楼 fantasykakaxi 的回复:
Quote: 引用 2 楼 Z65443344 的回复:

拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了

#7


引用 6 楼 Z65443344 的回复:
Quote: 引用 3 楼 fantasykakaxi 的回复:

Quote: 引用 2 楼 Z65443344 的回复:

拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了



 DataTable table = new DataTable();
        string str = "select * from Record where 1=1";
        if (DropDownList1.SelectedValue != "")
        {
            str += string.Format("and UserID='"+DropDownList1.SelectedValue+"'");
        }
        if(starttime.Value!="")
        {
            str+= string.Format("and CreatTime like '%"+starttime.Value+"%'");
        }
        if (endtime.Value != "")
        {
            str += string.Format("and CompleteTime like'%" + endtime.Value + "%'");
        }
        table = SqlHelper.ExecuteDataTable(str);

这样写对么

#8


select * from 表 where namefield=

引用 1 楼 starfd 的回复:
QueryEntity query;
var whereSql = new StringBuilder("Where 1=1");
IList<DbParameter> parameters = new List<DbParameter>();
if (!string.IsNullOrEmpty(query.XXX))
{
    whereSql.Append(" And XXX=@XXX");
    parameters.Add(new SqlParameter("XXX", query.XXX));
}

类似这样
  string ParaName = "name";
            string ParaSTime = "";
            string ParaETime = null;
            string sql = string.Format("select * from 表 where namefield='{0}' {1} {2} "
                , ParaName
                , string.IsNullOrEmpty(ParaSTime) ? "" : "and stimefield='" + ParaSTime + "'"
                , string.IsNullOrEmpty(ParaETime) ? "" : "and etimefield='" + ParaETime + "");

#9


引用 8 楼 hbu_pig 的回复:
select * from 表 where namefield=

Quote: 引用 1 楼 starfd 的回复:

QueryEntity query;
var whereSql = new StringBuilder("Where 1=1");
IList<DbParameter> parameters = new List<DbParameter>();
if (!string.IsNullOrEmpty(query.XXX))
{
    whereSql.Append(" And XXX=@XXX");
    parameters.Add(new SqlParameter("XXX", query.XXX));
}

类似这样
  string ParaName = "name";
            string ParaSTime = "";
            string ParaETime = null;
            string sql = string.Format("select * from 表 where namefield='{0}' {1} {2} "
                , ParaName
                , string.IsNullOrEmpty(ParaSTime) ? "" : "and stimefield='" + ParaSTime + "'"
                , string.IsNullOrEmpty(ParaETime) ? "" : "and etimefield='" + ParaETime + "");


我楼上那个对么  我先试试你这个

#10


引用 8 楼 hbu_pig 的回复:
select * from 表 where namefield=

Quote: 引用 1 楼 starfd 的回复:

QueryEntity query;
var whereSql = new StringBuilder("Where 1=1");
IList<DbParameter> parameters = new List<DbParameter>();
if (!string.IsNullOrEmpty(query.XXX))
{
    whereSql.Append(" And XXX=@XXX");
    parameters.Add(new SqlParameter("XXX", query.XXX));
}

类似这样
  string ParaName = "name";
            string ParaSTime = "";
            string ParaETime = null;
            string sql = string.Format("select * from 表 where namefield='{0}' {1} {2} "
                , ParaName
                , string.IsNullOrEmpty(ParaSTime) ? "" : "and stimefield='" + ParaSTime + "'"
                , string.IsNullOrEmpty(ParaETime) ? "" : "and etimefield='" + ParaETime + "");


而且我还想加个模糊查询 数据库的时间精确到秒 这边的时间只获取到天 

#11


引用 7 楼 fantasykakaxi 的回复:
Quote: 引用 6 楼 Z65443344 的回复:

Quote: 引用 3 楼 fantasykakaxi 的回复:

Quote: 引用 2 楼 Z65443344 的回复:

拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了



 DataTable table = new DataTable();
        string str = "select * from Record where 1=1";
        if (DropDownList1.SelectedValue != "")
        {
            str += string.Format("and UserID='"+DropDownList1.SelectedValue+"'");
        }
        if(starttime.Value!="")
        {
            str+= string.Format("and CreatTime like '%"+starttime.Value+"%'");
        }
        if (endtime.Value != "")
        {
            str += string.Format("and CompleteTime like'%" + endtime.Value + "%'");
        }
        table = SqlHelper.ExecuteDataTable(str);

这样写对么
对的,拼接sql

#12


引用 11 楼 xujun5031 的回复:
Quote: 引用 7 楼 fantasykakaxi 的回复:

Quote: 引用 6 楼 Z65443344 的回复:

Quote: 引用 3 楼 fantasykakaxi 的回复:

Quote: 引用 2 楼 Z65443344 的回复:

拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了



 DataTable table = new DataTable();
        string str = "select * from Record where 1=1";
        if (DropDownList1.SelectedValue != "")
        {
            str += string.Format("and UserID='"+DropDownList1.SelectedValue+"'");
        }
        if(starttime.Value!="")
        {
            str+= string.Format("and CreatTime like '%"+starttime.Value+"%'");
        }
        if (endtime.Value != "")
        {
            str += string.Format("and CompleteTime like'%" + endtime.Value + "%'");
        }
        table = SqlHelper.ExecuteDataTable(str);

这样写对么
对的,拼接sql


我这样写完 运行没有反应 断点也看不出错误

#13


引用 12 楼 fantasykakaxi 的回复:
Quote: 引用 11 楼 xujun5031 的回复:

Quote: 引用 7 楼 fantasykakaxi 的回复:

Quote: 引用 6 楼 Z65443344 的回复:

Quote: 引用 3 楼 fantasykakaxi 的回复:

Quote: 引用 2 楼 Z65443344 的回复:

拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了



 DataTable table = new DataTable();
        string str = "select * from Record where 1=1";
        if (DropDownList1.SelectedValue != "")
        {
            str += string.Format("and UserID='"+DropDownList1.SelectedValue+"'");
        }
        if(starttime.Value!="")
        {
            str+= string.Format("and CreatTime like '%"+starttime.Value+"%'");
        }
        if (endtime.Value != "")
        {
            str += string.Format("and CompleteTime like'%" + endtime.Value + "%'");
        }
        table = SqlHelper.ExecuteDataTable(str);

这样写对么
对的,拼接sql


我这样写完 运行没有反应 断点也看不出错误
断点调试的时候,看一下最终的sql,放sql server 里运行下

#14


引用 13 楼 xujun5031 的回复:
string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊
where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了


 DataTable table = new DataTable();
        string str = "select * from Record where 1=1";
        if (DropDownList1.SelectedValue != "")
        {
            str += string.Format("and UserID='"+DropDownList1.SelectedValue+"'");
        }
        if(starttime.Value!="")
        {
            str+= string.Format("and CreatTime like '%"+starttime.Value+"%'");
        }
        if (endtime.Value != "")
        {
            str += string.Format("and CompleteTime like'%" + endtime.Value + "%'");
        }
        table = SqlHelper.ExecuteDataTable(str);

这样写对么对的,拼接sql

我这样写完 运行没有反应 断点也看不出错误断点调试的时候,看一下最终的sql,放sql server 里运行下




引用 13 楼 xujun5031 的回复:
Quote: 引用 12 楼 fantasykakaxi 的回复:

Quote: 引用 11 楼 xujun5031 的回复:

Quote: 引用 7 楼 fantasykakaxi 的回复:

Quote: 引用 6 楼 Z65443344 的回复:

Quote: 引用 3 楼 fantasykakaxi 的回复:

Quote: 引用 2 楼 Z65443344 的回复:

拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了



 DataTable table = new DataTable();
        string str = "select * from Record where 1=1";
        if (DropDownList1.SelectedValue != "")
        {
            str += string.Format("and UserID='"+DropDownList1.SelectedValue+"'");
        }
        if(starttime.Value!="")
        {
            str+= string.Format("and CreatTime like '%"+starttime.Value+"%'");
        }
        if (endtime.Value != "")
        {
            str += string.Format("and CompleteTime like'%" + endtime.Value + "%'");
        }
        table = SqlHelper.ExecuteDataTable(str);

这样写对么
对的,拼接sql


我这样写完 运行没有反应 断点也看不出错误
断点调试的时候,看一下最终的sql,放sql server 里运行下


查出来了 应该是时间的问题 我用了like语法没错 但是查不出来

#15


引用 8 楼 hbu_pig 的回复:
select * from 表 where namefield=

Quote: 引用 1 楼 starfd 的回复:

QueryEntity query;
var whereSql = new StringBuilder("Where 1=1");
IList<DbParameter> parameters = new List<DbParameter>();
if (!string.IsNullOrEmpty(query.XXX))
{
    whereSql.Append(" And XXX=@XXX");
    parameters.Add(new SqlParameter("XXX", query.XXX));
}

类似这样
  string ParaName = "name";
            string ParaSTime = "";
            string ParaETime = null;
            string sql = string.Format("select * from 表 where namefield='{0}' {1} {2} "
                , ParaName
                , string.IsNullOrEmpty(ParaSTime) ? "" : "and stimefield='" + ParaSTime + "'"
                , string.IsNullOrEmpty(ParaETime) ? "" : "and etimefield='" + ParaETime + "");

你这个不能防SQL注入,人家那个可以。

#1


QueryEntity query;
var whereSql = new StringBuilder("Where 1=1");
IList<DbParameter> parameters = new List<DbParameter>();
if (!string.IsNullOrEmpty(query.XXX))
{
    whereSql.Append(" And XXX=@XXX");
    parameters.Add(new SqlParameter("XXX", query.XXX));
}

类似这样

#2


拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}

#3


引用 2 楼 Z65443344 的回复:
拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

#4


引用 1 楼 starfd 的回复:
QueryEntity query;
var whereSql = new StringBuilder("Where 1=1");
IList<DbParameter> parameters = new List<DbParameter>();
if (!string.IsNullOrEmpty(query.XXX))
{
    whereSql.Append(" And XXX=@XXX");
    parameters.Add(new SqlParameter("XXX", query.XXX));
}

类似这样

我凑 没看懂

#5


string sql="Select * From Table1 Where 1=1";
if(姓名.TextLength>0)
 sql+=" And 姓名='"+姓名.Text+"'";
//后面条件类似...

#6


引用 3 楼 fantasykakaxi 的回复:
Quote: 引用 2 楼 Z65443344 的回复:

拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了

#7


引用 6 楼 Z65443344 的回复:
Quote: 引用 3 楼 fantasykakaxi 的回复:

Quote: 引用 2 楼 Z65443344 的回复:

拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了



 DataTable table = new DataTable();
        string str = "select * from Record where 1=1";
        if (DropDownList1.SelectedValue != "")
        {
            str += string.Format("and UserID='"+DropDownList1.SelectedValue+"'");
        }
        if(starttime.Value!="")
        {
            str+= string.Format("and CreatTime like '%"+starttime.Value+"%'");
        }
        if (endtime.Value != "")
        {
            str += string.Format("and CompleteTime like'%" + endtime.Value + "%'");
        }
        table = SqlHelper.ExecuteDataTable(str);

这样写对么

#8


select * from 表 where namefield=

引用 1 楼 starfd 的回复:
QueryEntity query;
var whereSql = new StringBuilder("Where 1=1");
IList<DbParameter> parameters = new List<DbParameter>();
if (!string.IsNullOrEmpty(query.XXX))
{
    whereSql.Append(" And XXX=@XXX");
    parameters.Add(new SqlParameter("XXX", query.XXX));
}

类似这样
  string ParaName = "name";
            string ParaSTime = "";
            string ParaETime = null;
            string sql = string.Format("select * from 表 where namefield='{0}' {1} {2} "
                , ParaName
                , string.IsNullOrEmpty(ParaSTime) ? "" : "and stimefield='" + ParaSTime + "'"
                , string.IsNullOrEmpty(ParaETime) ? "" : "and etimefield='" + ParaETime + "");

#9


引用 8 楼 hbu_pig 的回复:
select * from 表 where namefield=

Quote: 引用 1 楼 starfd 的回复:

QueryEntity query;
var whereSql = new StringBuilder("Where 1=1");
IList<DbParameter> parameters = new List<DbParameter>();
if (!string.IsNullOrEmpty(query.XXX))
{
    whereSql.Append(" And XXX=@XXX");
    parameters.Add(new SqlParameter("XXX", query.XXX));
}

类似这样
  string ParaName = "name";
            string ParaSTime = "";
            string ParaETime = null;
            string sql = string.Format("select * from 表 where namefield='{0}' {1} {2} "
                , ParaName
                , string.IsNullOrEmpty(ParaSTime) ? "" : "and stimefield='" + ParaSTime + "'"
                , string.IsNullOrEmpty(ParaETime) ? "" : "and etimefield='" + ParaETime + "");


我楼上那个对么  我先试试你这个

#10


引用 8 楼 hbu_pig 的回复:
select * from 表 where namefield=

Quote: 引用 1 楼 starfd 的回复:

QueryEntity query;
var whereSql = new StringBuilder("Where 1=1");
IList<DbParameter> parameters = new List<DbParameter>();
if (!string.IsNullOrEmpty(query.XXX))
{
    whereSql.Append(" And XXX=@XXX");
    parameters.Add(new SqlParameter("XXX", query.XXX));
}

类似这样
  string ParaName = "name";
            string ParaSTime = "";
            string ParaETime = null;
            string sql = string.Format("select * from 表 where namefield='{0}' {1} {2} "
                , ParaName
                , string.IsNullOrEmpty(ParaSTime) ? "" : "and stimefield='" + ParaSTime + "'"
                , string.IsNullOrEmpty(ParaETime) ? "" : "and etimefield='" + ParaETime + "");


而且我还想加个模糊查询 数据库的时间精确到秒 这边的时间只获取到天 

#11


引用 7 楼 fantasykakaxi 的回复:
Quote: 引用 6 楼 Z65443344 的回复:

Quote: 引用 3 楼 fantasykakaxi 的回复:

Quote: 引用 2 楼 Z65443344 的回复:

拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了



 DataTable table = new DataTable();
        string str = "select * from Record where 1=1";
        if (DropDownList1.SelectedValue != "")
        {
            str += string.Format("and UserID='"+DropDownList1.SelectedValue+"'");
        }
        if(starttime.Value!="")
        {
            str+= string.Format("and CreatTime like '%"+starttime.Value+"%'");
        }
        if (endtime.Value != "")
        {
            str += string.Format("and CompleteTime like'%" + endtime.Value + "%'");
        }
        table = SqlHelper.ExecuteDataTable(str);

这样写对么
对的,拼接sql

#12


引用 11 楼 xujun5031 的回复:
Quote: 引用 7 楼 fantasykakaxi 的回复:

Quote: 引用 6 楼 Z65443344 的回复:

Quote: 引用 3 楼 fantasykakaxi 的回复:

Quote: 引用 2 楼 Z65443344 的回复:

拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了



 DataTable table = new DataTable();
        string str = "select * from Record where 1=1";
        if (DropDownList1.SelectedValue != "")
        {
            str += string.Format("and UserID='"+DropDownList1.SelectedValue+"'");
        }
        if(starttime.Value!="")
        {
            str+= string.Format("and CreatTime like '%"+starttime.Value+"%'");
        }
        if (endtime.Value != "")
        {
            str += string.Format("and CompleteTime like'%" + endtime.Value + "%'");
        }
        table = SqlHelper.ExecuteDataTable(str);

这样写对么
对的,拼接sql


我这样写完 运行没有反应 断点也看不出错误

#13


引用 12 楼 fantasykakaxi 的回复:
Quote: 引用 11 楼 xujun5031 的回复:

Quote: 引用 7 楼 fantasykakaxi 的回复:

Quote: 引用 6 楼 Z65443344 的回复:

Quote: 引用 3 楼 fantasykakaxi 的回复:

Quote: 引用 2 楼 Z65443344 的回复:

拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了



 DataTable table = new DataTable();
        string str = "select * from Record where 1=1";
        if (DropDownList1.SelectedValue != "")
        {
            str += string.Format("and UserID='"+DropDownList1.SelectedValue+"'");
        }
        if(starttime.Value!="")
        {
            str+= string.Format("and CreatTime like '%"+starttime.Value+"%'");
        }
        if (endtime.Value != "")
        {
            str += string.Format("and CompleteTime like'%" + endtime.Value + "%'");
        }
        table = SqlHelper.ExecuteDataTable(str);

这样写对么
对的,拼接sql


我这样写完 运行没有反应 断点也看不出错误
断点调试的时候,看一下最终的sql,放sql server 里运行下

#14


引用 13 楼 xujun5031 的回复:
string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊
where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了


 DataTable table = new DataTable();
        string str = "select * from Record where 1=1";
        if (DropDownList1.SelectedValue != "")
        {
            str += string.Format("and UserID='"+DropDownList1.SelectedValue+"'");
        }
        if(starttime.Value!="")
        {
            str+= string.Format("and CreatTime like '%"+starttime.Value+"%'");
        }
        if (endtime.Value != "")
        {
            str += string.Format("and CompleteTime like'%" + endtime.Value + "%'");
        }
        table = SqlHelper.ExecuteDataTable(str);

这样写对么对的,拼接sql

我这样写完 运行没有反应 断点也看不出错误断点调试的时候,看一下最终的sql,放sql server 里运行下




引用 13 楼 xujun5031 的回复:
Quote: 引用 12 楼 fantasykakaxi 的回复:

Quote: 引用 11 楼 xujun5031 的回复:

Quote: 引用 7 楼 fantasykakaxi 的回复:

Quote: 引用 6 楼 Z65443344 的回复:

Quote: 引用 3 楼 fantasykakaxi 的回复:

Quote: 引用 2 楼 Z65443344 的回复:

拼接字符串会不会?

string sql="select * from 表 where 1=1";
if(姓名!="")
{
sql+=string.Format(" and 姓名='{0}'",;
}


where 1=1 是啥啊

where 1=1就是代表永真啊
就是因为你后面的条件位置不确定,那么把where放到后面,可能会出现多个where
而如果放到最前面,而你后面3个都不选,就是要查全部,相当于sql里没有where条件了



 DataTable table = new DataTable();
        string str = "select * from Record where 1=1";
        if (DropDownList1.SelectedValue != "")
        {
            str += string.Format("and UserID='"+DropDownList1.SelectedValue+"'");
        }
        if(starttime.Value!="")
        {
            str+= string.Format("and CreatTime like '%"+starttime.Value+"%'");
        }
        if (endtime.Value != "")
        {
            str += string.Format("and CompleteTime like'%" + endtime.Value + "%'");
        }
        table = SqlHelper.ExecuteDataTable(str);

这样写对么
对的,拼接sql


我这样写完 运行没有反应 断点也看不出错误
断点调试的时候,看一下最终的sql,放sql server 里运行下


查出来了 应该是时间的问题 我用了like语法没错 但是查不出来

#15


引用 8 楼 hbu_pig 的回复:
select * from 表 where namefield=

Quote: 引用 1 楼 starfd 的回复:

QueryEntity query;
var whereSql = new StringBuilder("Where 1=1");
IList<DbParameter> parameters = new List<DbParameter>();
if (!string.IsNullOrEmpty(query.XXX))
{
    whereSql.Append(" And XXX=@XXX");
    parameters.Add(new SqlParameter("XXX", query.XXX));
}

类似这样
  string ParaName = "name";
            string ParaSTime = "";
            string ParaETime = null;
            string sql = string.Format("select * from 表 where namefield='{0}' {1} {2} "
                , ParaName
                , string.IsNullOrEmpty(ParaSTime) ? "" : "and stimefield='" + ParaSTime + "'"
                , string.IsNullOrEmpty(ParaETime) ? "" : "and etimefield='" + ParaETime + "");

你这个不能防SQL注入,人家那个可以。