SqlBulkCopy和datetime2目标数据库列

时间:2019-06-17 17:54:06

标签: sql-server datatable ado.net sqlbulkcopy

如果您查看此Microsoft文档文章:

https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlbulkcopy?redirectedfrom=MSDN&view=netframework-4.5.2

在“备注”部分显示:

  

批量加载类型为DataTable的列时,SqlBulkCopy将失败   SqlDateTime插入类型为以下类型之一的SQL Server列   SQL Server 2008中添加的日期/时间类型。

我没有观察到这种现象(失败),并且想知道此文档是否可能已过时,并且SqlBulkCopy已更新为支持这些数据类型。

有关我的工作的更多详细信息:

  • 我创建DataTable作为SqlBulkCopy的源。 DataTable列 的类型为 System.DateTime
  • 数据库表中的目标列的类型为 datetime2
  • 我使用.Net 4.5和SQL Server 2016 SP1

一切正常。我没有失败。我什至尝试在数据表中传递“ 01/01/0001”日期(超出SQL datetime 类型的范围),并将其保存为数据库中的值。

我确实找到了这个已有8年历史的SO帖子:How can I set column type when using SqlBulkCopy to insert into a sql_variant column,但我没有使用 sql_variant ,在我的情况下,一切都没有失败。

有人可以澄清我引用的Microsoft文档是什么意思吗?

1 个答案:

答案 0 :(得分:1)

  

将类型SqlDateTime的DataTable列批量加载到类型为SQL Server 2008中添加的日期/时间类型之一的SQL Server列中时,SqlBulkCopy将失败。

但是您将列的类型写为System.DateTime-因此,此注释与您的代码无关。

换句话说,如果您是这样创建数据表的:

var dt = new DataTable();
dt.Columns.Add("date column", typeof(SqlDateTime));
// ... other columns here

这将与您的代码有关。