什么应该是默认的日期时间值?

时间:2015-06-10 10:55:48

标签: sql-server datetime type-conversion

我在DataTable的{​​{1}}中插入Excel工作表记录,并将此DataTable传递给SQL c#。在我的c#代码中,我对Excel工作表的stored procedure数据单元格进行了某些检查以避免例外。但似乎我在为SQL empty字段提供default值时遗漏了某些内容。

Date

我收到以下错误:

  

字符串未被识别为有效的DateTime.Could not store   < 0/00/0000 00:00:00 AM>在InvoiceDate列中。预期的类型是   日期时间。

已修改 SQL字段声明[InvoiceDate]

string InvoiceDate = (row.Cells[3].Text == " ") ? "0/00/0000 00:00:00 AM" : (row.Cells[3].Text);

请不要建议插入[InvoiceDate] [date] NOT NULL ,因为我无法为此列插入null

2 个答案:

答案 0 :(得分:4)

首先,没有00/00/0000日期,不在现实世界中,也不在sql server中。

第二,为什么你甚至需要一个默认值?只需使用null。

第三次,使用ISO 8601格式指定字符串中的日期(yyyy-mm-ddThh:mm:ss

Forth ,正如Giorgi在评论中正确指出的那样,为什么甚至使用字符串作为日期时间值?在c#中使用DateTime类型的变量。请注意,它的最小值与sql server DateTime数据类型最小值不同。

如果您的datetime列不可为空,则可以使用1753-01-01(日期时间的最小值)或9999-12-31(日期时间的最大值)

最后一点,您可能需要考虑使用datetime2或将日期和时间分隔到不同的列(数据类型datetime,当然)。为什么? read here.

答案 1 :(得分:0)

尝试插入当前日期:

string InvoiceDate = string.IsNullOrEmpty(row.Cells[3].Text) ? DateTime.Now.ToString() : (row.Cells[3].Text);