Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 日历扩展器_Asp.net_Sql - Fatal编程技术网

Asp.net 日历扩展器

Asp.net 日历扩展器,asp.net,sql,Asp.net,Sql,我正在asp.net中使用calendarextender控件。它只显示日期,不显示时间。但在插入到数据库时,时间会自动插入。但在where条件下使用date从数据库检索数据时,不会显示相应的记录。我可以对StoredProcess进行哪些修改来解决此问题 我在StoredProcess中使用了以下代码。表的名称为FileM Select * from FileM Where OldDate = '@OldDate%' 数据库中的OldDate字段存储为datetime,即日期是我插入的日期,

我正在asp.net中使用calendarextender控件。它只显示日期,不显示时间。但在插入到数据库时,时间会自动插入。但在where条件下使用date从数据库检索数据时,不会显示相应的记录。我可以对StoredProcess进行哪些修改来解决此问题

我在StoredProcess中使用了以下代码。表的名称为FileM

Select * from FileM Where OldDate = '@OldDate%'
数据库中的OldDate字段存储为datetime,即日期是我插入的日期,但时间是
08:00:00:000
00:00:000
。因此,上面的查询将日期记录为
00:00:000
,而不是
08:00:00:000

-- assumes that the @OldDate parameter is a DATETIME
SELECT *
FROM FileM
WHERE DATEDIFF(day, OldDate, @OldDate) = 0
如果您能够修改存储过程,那么通过传递两个
DATETIME
参数,指定所需范围的开始和结束时间,您可以获得更大的灵活性和性能:

CREATE PROCEDURE dbo.GetRangeOfRecords
@StartDateTime DATETIME,
@EndDateTime DATETIME
AS
SELECT *
FROM FileM
WHERE OldDate BETWEEN @StartDateTime AND @EndDateTime
然后像这样调用存储过程,例如:

EXEC dbo.GetRangeOfRecords
    @StartDateTime = '2009-02-25 00:00:00.000',
    @EndDateTime = '2009-02-25 23:59:59.999'

以下代码将删除datetime值的时间部分(删除的意思是将其设置为00:00:00,即午夜):-

dateadd(d,datediff(d,0,MyDateTimeColumn),0)

因此,您可以使用:-

从文件M中选择*其中dateadd(d,datediff(d,0,OldDate),0)=@OldDate


或者,如果您使用的是SQL Server 2008,则会有一个(没有时间组件)。

只要您的所有日期都没有明确指定时间组件,它们都应该默认为00:00:00.000。在这种情况下,简单的等式比较就可以了。但在代码中,您在参数周围加了引号,这意味着您现在将日期与“@OldDate%”的文本字符串进行比较。删除引号,看看这是否有帮助


我喜欢Luke关于灵活性的回答,但是如果您没有这个选项,并且只能更正现有的存储过程,这可能会有所帮助。

您最好只从参数中剥离时间,并将其用于下限,将其设为11:59:59.997作为上限,从而生成一个范围(.999四舍五入到下一个日期的午夜)。这样可以使用索引。如果更改表列值,SQL将无法使用索引