我正在进行每周一次的报告,用户将为此报告选择两个日期。例如,用户想要查看两个日期之间的数据。我是在网络应用程序中完成的。
我写了这样的代码:
@"select distinct d1.machine as Machine,CASE WHEN t.time BETWEEN '1900-01-01 7:00:00.000'
AND '1900-01-01 14:59:59.999' THEN 'Shift1' WHEN t.time BETWEEN '1900-01-01
15:00:00.000' AND '1900-01-01 22:59:59.999' THEN 'Shift2' WHEN t.time BETWEEN '1900-01-01
23:00:00.000' AND '1900-01-01 23:59:59.999' THEN 'Shift3' WHEN t.time BETWEEN '1900-01-01
00:00:00.000' AND '1900-01-01 06:59:59.999' THEN 'Shift3' END as Shiftname,CASE WHEN
t.time BETWEEN '1900-01-01 7:00:00.000' AND '1900-01-01 14:59:59.999' THEN 'Operator1'
WHEN t.time BETWEEN '1900-01-01 15:00:00.000' AND '1900-01-01 22:59:59.999'
THEN 'Operator2' WHEN t.time BETWEEN '1900-01-01 23:00:00.000' AND '1900-01-01
23:59:59.999' THEN 'Operator3' WHEN t.time BETWEEN '1900-01-01 00:00:00.000' AND '1900-01-
01 06:59:59.999' THEN 'Operator3' END as OperatorName, Date=convert(varchar
(12),t.date,101),Time=convert(varchar(8),t.time,8),Temprature as
Temperature,Pressure,Co2,Do2,pH,Speed,Flow from datalogging1 d1 inner join temprature3
t on d1.date=t.date inner join pressure3 p on p.date=t.date and datepart(hour,t.time)
=datepart(hour,p.time) and datepart(minute,t.time)=datepart(minute,p.time) inner join co23
c on c.date=t.date and datepart(hour,t.time)=datepart(hour,c.time) and datepart
(minute,t.time)=datepart(minute,c.time) inner join do23 d on d.date=t.date and datepart
(hour,t.time)=datepart(hour,d.time) and datepart(minute,t.time)=datepart(minute,d.time)
inner join ph3 h on h.date=t.date and datepart(hour,t.time)=datepart(hour,h.time) and
datepart(minute,t.time)=datepart(minute,h.time) inner join speed3 s on s.date=t.date and
datepart(hour,t.time)=datepart(hour,s.time) and datepart(minute,t.time)=datepart
(minute,s.time) inner join flow3 f on f.date=t.date and datepart(hour,t.time)=datepart
(hour,f.time) and datepart(minute,t.time)=datepart(minute,f.time) where t.date
between '"+txtfromdate+@"' and '"+txttodate+@"' and line='"+ddlline.SelectedItem+@"' union
select distinct d1.machine as Machine, CASE WHEN t.time BETWEEN '1900-01-01 7:00:00.000'
AND '1900-01-01 14:59:59.999' THEN 'Shift1' WHEN t.time BETWEEN '1900-01-01
15:00:00.000' AND '1900-01-01 22:59:59.999' THEN 'Shift2' WHEN t.time BETWEEN '1900-01-01
23:00:00.000' AND '1900-01-01 23:59:59.999' THEN 'Shift3' WHEN t.time BETWEEN '1900-01-01
00:00:00.000' AND '1900-01-01 6:59:59.999' THEN 'Shift3' END as Shiftname,CASE WHEN
t.time BETWEEN '1900-01-01 7:00:00.000' AND '1900-01-01 14:59:59.999' THEN 'Operator1'
WHEN t.time BETWEEN '1900-01-01 15:00:00.000' AND '1900-01-01 22:59:59.999'
THEN 'Operator2' WHEN t.time BETWEEN '1900-01-01 23:00:00.000' AND '1900-01-01
23:59:59.999' THEN 'Operator3' WHEN t.time BETWEEN '1900-01-01 00:00:00.000' AND '1900-01-
01 6:59:59.999' THEN 'Operator3' END as OperatorName,Date=convert(varchar
(12),t.date,101),Time=convert(varchar(8),t.time,8),Temprature as
Temperature,Pressure,Co2,Do2,pH,Speed,Flow from datalogging1 d1 inner join temprature3 t
on d1.date=t.date inner join pressure3 p on p.date=t.date and datepart(hour,t.time)
=datepart(hour,p.time) and datepart(minute,t.time)=datepart(minute,p.time) inner join co23
c on c.date=t.date and datepart(hour,t.time)=datepart(hour,c.time) and datepart
(minute,t.time)=datepart(minute,c.time) inner join do23 d on d.date=t.date and datepart
(hour,t.time)=datepart(hour,d.time) and datepart(minute,t.time)=datepart(minute,d.time)
inner join ph3 h on h.date=t.date and datepart(hour,t.time)=datepart(hour,h.time) and
datepart(minute,t.time)=datepart(minute,h.time) inner join speed3 s on s.date=t.date and
datepart(hour,t.time)=datepart(hour,s.time) and datepart(minute,t.time)=datepart
(minute,s.time) inner join flow3 f on f.date=t.date and datepart(hour,t.time)=datepart
(hour,f.time) and datepart(minute,t.time)=datepart(minute,f.time) where t.date=dateadd
(day,1,'"+txttodate+@"') and line='"+ddlline.SelectedItem+@"' order by
date,time,machine,shiftname,operatorname"
它正在SQL Server中执行,但是当我将它包含在我的应用程序中时,它会显示错误,如
将字符串转换为smalldatetime数据类型时转换失败。
有人可以帮我吗?
答案 0 :(得分:1)
在转换为txtfromdate
或txttodate
之后,尝试将其作为参数传递,而不是使用DateTime
和SqlDateTime
的字符串连接。您的问题几乎可以肯定是这些控件中的文本是如何格式化的,SQL Server无法解释。