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个查询参数,要参数多怎么办
(
@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
这样呢
为空就不查,不为空就查怎么办呢
我想了个办法
不知道可不可以
if(cn.U_BeginTime!="")
{
Sql = Sql + " AND U_Name = @Name";
}
else
{
Sql = Sql + " AND U_Name like @Name";
}
SqlParameter[] parms2不就行了
T可为类
{
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";
}
建议用存储过程
这个时候要过滤掉一些关键字比如第一个的时间
这样的还好处理
你把两个参数都传进去
如果为空的话,你就设一个极小的值或极大的值