public int ExistsUserInfo(cUserInfoInfo cu)
{
int c=0;
string Sql="SELECT COUNT(*) FROM UserInfo WHERE U_Time Between @BeginTime AND @EndTime";
SqlParameter[] parms=new SqlParameter[]{
   new SqlParameter("@EndTime",SqlDbType.VarChar,30),
new SqlParameter("@PassWord",SqlDbType.VarChar,30)
   };
parms[0].Value=cu.U_BeginTime;
parms[1].Value=cu.U_EndTime;
SqlDataReader dr=SqlHelper.ExecuteReader(ICon.Cnn,CommandType.Text,Sql,parms);
if(dr.Read())
{
int cnt=dr.GetInt32(0);
if(cnt>0)
{
c=1;
}
}
dr.Close();
ICon.Close();
return c;
}简单的都是这样用的,但我有的时候只想开始时间为空就按截止时间查,
截止时间为空就按开始时间查,这样怎么办呢
string Sql="SELECT COUNT(*) FROM UserInfo WHERE 1=1";
if(cn.U_BeginTime!="")
{
  Sql = Sql + " AND U_Time >= @BeginTime";
}
if(cn.U_EndTime!="")
{
  Sql = Sql + " AND U_Time >= @EndTime";
}以前直接拼SQL可以这样
但用序列化参数好像不行啊,这样参数没发判断几个啊
再说我这才是2个查询参数,要参数多怎么办

解决方案 »

  1.   

    create proc proc_select
    (
      @BeginTime datetime,
      @EndTime datetime
    )
    as
    if(@BeginTime=null)
    begin
    SELECT COUNT(*) FROM UserInfo WHERE U_Time<=@EndTime
    end
    else
    begin
    SELECT COUNT(*) FROM UserInfo WHERE U_Time Between @BeginTime AND @EndTime
    end
      

  2.   

    那我又是时间段  又是商家名称  又是销售员
    这样呢
    为空就不查,不为空就查怎么办呢
    我想了个办法
    不知道可不可以
    if(cn.U_BeginTime!="")
    {
      Sql = Sql + " AND U_Name = @Name";
    }
    else
    {
      Sql = Sql + " AND U_Name like @Name";
    }
      

  3.   

    使用List<SqlParameter> 把.
      

  4.   

    用两个SqlParameter[] parms1
    SqlParameter[] parms2不就行了
      

  5.   

    通过泛型判断SqlParameter是否为多个,再循环添加参数
      

  6.   

    List<T> lst=new List<T>();
    T可为类
      

  7.   

    string Sql="SELECT COUNT(*) FROM UserInfo WHERE 1=1";if(cn.U_BeginTime!="")
    {
    SqlParameter[] parms=new SqlParameter[]{
                                                       new SqlParameter("@EndTime",SqlDbType.VarChar,30
                                                       };
                parms[0].Value=cu.U_BeginTime;  Sql = Sql + " AND U_Time >= @BeginTime";
    }
    if(cn.U_EndTime!="")
    {
    SqlParameter[] parms=new SqlParameter[]{
                                                       new SqlParameter("@另一个",SqlDbType.VarChar,30
                                                       };
                parms[0].Value=cu.U_BeginTime;
      Sql = Sql + " AND U_Time >= @EndTime";
    }
    建议用存储过程
      

  8.   

    1.你要拼接SqlCommand的string也不是不可以,不过一旦拼接了,给人感觉就是不太安全,因为拼接逻辑有漏洞的话,别人就可以尝试注入了。不过拼接却是能够很好解决动态生成WHERE子句的问题。2.针对时间查询的问题,你可以用DateTime.MinValue和DateTime.MaxValue来解决。例如当结束时间不存在时,也就相当于结束时间 < DateTime.MaxValue,这就很好地解决了你地问题。
      

  9.   

    参数一个一个的放进去,不要用一个Parameter数组。在拼凑 SQL 语句的部分,改变了语句就根据需要增加一个 Parameter,或者不添加 Parameter。
      

  10.   

    复杂的拼接sql写起来最简单
    这个时候要过滤掉一些关键字比如第一个的时间
    这样的还好处理
    你把两个参数都传进去
    如果为空的话,你就设一个极小的值或极大的值