我正在编写过滤搜索功能。也就是说,用户将在此基础上搜索数据 任何记录日期时间或名称,数字。
这里我也从其他表中返回数据。所以我也实现了内连接。 为此,我的商店程序如下 -
ALTER PROC [dbo].[spFilterSearch]
@var1 VARCHAR(10),
@var2 VARCHAR(10),
@Printdate DATETIME,
@ToDate varchar(10),
@FromDate varchar(10)
AS BEGIN
DECLARE @td DateTime SET @td=CONVERT(DATETIME,@ToDate,105)
DECLARE @fd DateTime SET @fd= CONVERT(DATETIME,@FromDate,105)
if(@Printdate <> NULL)
BEGIN
SELECT cVar1, cVar2, Printdate,
bg.Fname AS Name
FROM dbo.Table1
INNER JOIN dbo.jTable2 jt ON Table1.id = jt.id
WHERE(cVar1 LIKE @var1+'%') AND
(cVar2 LIKE @var2+'%')
AND (convert(datetime,Printdate,105)=@FPdate)
END
ELSE
BEGIN
SELECT cVar1, cVar2, Printdate,
bg.Fname AS Name
FROM dbo.Table1
INNER JOIN dbo.jTable2 jt ON Table1.id = jt.id
WHERE(cVar1 LIKE @var1+'%') AND
(cVar2 LIKE @var2+'%')
AND (convert(DATETIME,Printdate,105)>=@fd AND convert(DATETIME,Printdate,105)<=@td)
END
END
(此程序不返回任何记录)
在前端
我已编码为,发送我创建FPdate
property
的空日期,如下所示
public DateTime? FPdate { get; set; }
并以这种方式在search event handler
if (txtPrintedOn.Text != "")
{
string[] dtt = txtPrintedOn.Text.Split(' ');
objprop.FPdate = Convert.ToDateTime(dtt);
}
else
{
objprop.FPdate = null;
}
并从业务层以参数的形式发送它,我写了这样的代码 -
if (prop.FPdate.Equals(null))
{
cmd.Parameters.AddWithValue("@Printdate", SqlDbType.DateTime).Value = Convert.DBNull;
}
else
{
cmd.Parameters.Add("@Printdate", SqlDbType.DateTime).Value = prop.FPdate;
}
if (prop.ToDate != null)
cmd.Parameters.AddWithValue("@ToDate", SqlDbType.VarChar).Value = prop.ToDate;
else cmd.Parameters.Add("@ToDate", SqlDbType.VarChar).Value = Convert.DBNull;
最后,数据集返回空。我好几个小时就撞到了墙上,但没有得到任何线索
我错了。请建议一种让它运行的方法。
由于
答案 0 :(得分:0)
将SP更改为使用以下
if(@Printdate is not NULL)
查看这些链接 -
Is there any difference between IS NULL and =NULL
使用此
cmd.Parameters.Add("@FPdate", SqlDbType.DateTime).Value = prop.FPdate.Value;