我在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
。
答案 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
或将日期和时间分隔到不同的列(数据类型date
和time
,当然)。为什么? read here.
答案 1 :(得分:0)
尝试插入当前日期:
string InvoiceDate = string.IsNullOrEmpty(row.Cells[3].Text) ? DateTime.Now.ToString() : (row.Cells[3].Text);