SQLBulkCopy 无法将时间转换为日期时间

发布于 2024-09-11 17:06:42 字数 386 浏览 5 评论 0原文

我正在编写一个小实用程序,用于将数据库从专有 ODBC 数据库复制到 SQL Server 数据库。一切都工作得很好,除了当我使用 SQLBulkCopy 复制数据时。它在大多数情况下都有效,但在尝试将 TIME 字段复制到 SQL DATETIME 时则无效。我收到此错误:

来自数据源的 TimeSpan 类型的给定值无法转换为指定目标列的 datetime 类型。

当我在 SQL Server 中创建架构时,我必须创建 DATE 和 TIME SQL Server 中的字段 DATETIME 类型,因此无法解决此问题。我想使用 SQLBulkCopy,这样我就不必手动读取每个表中的每条记录并围绕特殊情况包装逻辑。在我走这条路之前,还有其他方法可以做到这一点吗?我根本无法控制源数据库架构或内容。

I am writing a small utility to copy a database from a proprietary ODBC database into a SQL Server database. Everything is working great, except when I use SQLBulkCopy to copy over the data. It works in most cases, but not when it's trying to copy a TIME field into a SQL DATETIME. I get this error:

The given value of type TimeSpan from the data source cannot be converted to type datetime of the specified target column.

When I create the schema in SQL Server I have to make the DATE and TIME fields DATETIME types in SQL Server, so there is no way around this. I wanted to use SQLBulkCopy so I didn't have to manually read through every record in every table and wrap logic around the special cases. Before I go down that road, is there another way I can do this? I have no control at all on the source database schema or content.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

请叫√我孤独 2024-09-18 17:06:42

我假设您正在处理 SQL Server 2008 之前的版本。SQL Server 2008 具有 DATE 和 TIME 数据类型。

我认为您必须使用与 SQL Server 架构匹配的 DataTable 并从源读取器加载该数据表,通过添加日期信息(例如 1/1/1900)适当地将任何 TIME 更改为 DATETIME。然后使用 WriteToServer(DataTable)。您可能想要批量执行此操作,因为您可能会使用大量内存将其全部读取到数据表中。

有什么特殊原因不能使用 SSIS?

I assume you are dealing with pre-SQL Server 2008. SQL Server 2008 has DATE and TIME data types.

I think you would have to use a DataTable which matched the SQL Server schema and load this from your source reader, appropriately changing any TIME to a DATETIME by adding date information (e.g. 1/1/1900). Then use WriteToServer(DataTable). You might want to do it in batches, since you may use a bunch of memory reading it all into a DataTable.

Any particular reason you can't use SSIS?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文