这是我的陈述Exception
说
无法从字符串转换为smalldatetime值
如何解决或写出正确的陈述?
da = new SqlDataAdapter("SELECT name,[build-id],exitTime,enterTime,tagType FROM Employees,GateLogging WHERE GateLogging.tagType='Employee' AND enterTime=DATEDIFF(minute,GateLogging.enterTime,GETDATE())>10", MyConn);
答案 0 :(得分:2)
在WHERE
子句中,删除DATEDIFF(minute,GateLogging.enterTime,GETDATE())>10
语句周围的单引号。
修改强>
您还将datetime字段与我称之为布尔值的字段进行比较。删除enterTime=
。您的陈述应如下所示:
da = new SqlDataAdapter("SELECT name,[build-id],exitTime,enterTime,tagType FROM Employees,GateLogging WHERE GateLogging.tagType='Employee' AND DATEDIFF(minute,GateLogging.enterTime,GETDATE())>10", MyConn);
编辑2
您的表定义如下:
tagID bigint
enterTime nchar(10)
exitTime nchar(10)
date nchar(10)
当然,enterTime
无法使用DATEDIFF
,因为它不是DATETIME
。
问题:为什么要将日期和时间存储为NCHAR(10)而不是DATETIME
?这不是好风格!
解决方案1:将enterTime
和exitTime
更改为DATETIME
,您就可以了。
解决方案2:更改您的陈述,以便将enterTime
转换为有效的DATETIME
。我假设enterTime
仅包含一天中的时间,因此您必须在转换前混合日期部分。
编辑3
假设date
以[{1}}格式存储当天,而yyyymmdd
以enterTime
格式存储时间,您将能够汇编hh:mm:ss
:
DATETIME
所以你上面的陈述看起来像是:
CONVERT(DATETIME, SUBSTRING(date, 1, 4) + '-' + SUBSTRING(date, 5, 2) + '-' + SUBSTRING(date, 7,2) + ' ' + entryTime, 102)
如果存储在数据库字段中的日期/时间格式不同,则必须相应地调整da = new SqlDataAdapter(
"SELECT name,[build-id],exitTime,enterTime,tagType
FROM Employees,GateLogging
WHERE GateLogging.tagType='Employee' AND
DATEDIFF(minute,CONVERT(DATETIME, SUBSTRING(date, 1, 4) + '-' + SUBSTRING(date, 5, 2) + '-' + SUBSTRING(date, 7,2) + ' ' + entryTime, 102),GETDATE())>10", MyConn);
中的SUBSTRING
语句。
答案 1 :(得分:1)
首先你把DATEDIFF的东西放在引号(')中并将它与enterTime进行比较,我怀疑它是smalldatetime类型,所以你得到了错误。正确的SQL将是:
SELECT name,[build-id],exitTime,enterTime,tagType
FROM Employees,
GateLogging
WHERE
GateLogging.tagType='Employee'
AND
enterTime = DATEDIFF(minute,GateLogging.enterTime,GETDATE())
至于你的> 10我认为你不应该将它与enterTime进行比较,而是使用它来代替:
SELECT name,[build-id],exitTime,enterTime,tagType
FROM Employees,
GateLogging
WHERE
GateLogging.tagType='Employee'
AND
DATEDIFF(minute,GateLogging.enterTime,GETDATE()) >10
答案 2 :(得分:0)
我也不认为你没有使用ANSI风格的连接语法 - 这可能会在以后的生活中引起一些问题。