在POP10100表中插入值到日期字段时会出现这样的异常:
System.Data.SqlClient.SqlException: INSERT语句与之冲突 CHECK约束 “CK_ POP10100 _DISCDA__009508B4”。该 数据库“TWO”发生冲突, 表“dbo.POP10100”,专栏 'DISCDATE'。声明一直如此 终止。在 System.Data.SqlClient.SqlConnection.OnError(SQLEXCEPTION exception,Boolean breakConnection)at System.Data.SqlClient.SqlInternalConnection.OnError(SQLEXCEPTION exception,Boolean breakConnection)
当我选中“DISCDATE”字段时,它会像这样写:
ALTER TABLE [dbo].[POP10100] WITH CHECK
ADD CHECK ((datepart(hour,[DISCDATE])=(0)
AND datepart(minute,[DISCDATE])=(0)
AND datepart(second,[DISCDATE])=(0)
AND datepart(millisecond,[DISCDATE])=(0)))
有人可以详细说明这个检查约束说什么,我的意思是我如何通过折扣日期值以避免上述异常。提前谢谢
答案 0 :(得分:1)
datepart
返回给定日期时间的一部分。
因此,它确保小时,分钟,秒和毫秒值都等于零。
更新:不要只是按原样传递DateTime,而是使用Date属性。 例如:
var date = DateTime.Now.Date;
答案 1 :(得分:0)
看起来它只接受时间为午夜(00:00:00)的日期。这可能是因为在SQL Server 2008之前,没有只保存日期值的数据类型,它将保存日期和时间值。