【问题标题】:SqlBulkCopy - InvalidOperationException - Which field is causing thisSqlBulkCopy - InvalidOperationException - 哪个字段导致此问题
【发布时间】:2013-04-30 09:00:41
【问题描述】:

我正在使用 SqlBulkCopy 类将 DataSet 插入到我的 SQL Server 数据库上的一对表中。

有时输入数据无法轻松转换为目标列所需的数据类型。这会导致 InvalidOperationException 具有以下描述:

来自数据源的String类型的给定值不能转换为指定目标列的smalldatetime类型。

InnerException 说:Failed to convert parameter value from a String to a DateTime.

我的表中有多个 DateTime 字段;如何找出导致异常的字段?

【问题讨论】:

  • 你应该显示你的代码
  • 嗨 Jens,只是为了澄清一下:我的问题是没有找出为什么会引发异常。我想要的是一种方法来找出,无论何时在这段代码的生命周期中的任何时候引发这种类型的异常,哪个字段导致了异常。

标签: c# .net sqlbulkcopy


【解决方案1】:

对于这个任务,也许您应该使用 SQL 集成服务。有了它,您可以将有问题的行重定向到文件以进行更正,以及其他可以让您的工作更轻松的功能。

看到这个:http://redmondmag.com/articles/2010/04/12/log-error-rows-ssis.aspx

【讨论】:

    【解决方案2】:

    唯一的解决办法就是分而治之。在您隔离列或使用 isdate 函数创建选择之前测试缺少列的插入(以及任何其他如果它可能是一个超出日期范围的问题,以找出有问题的列或行

    【讨论】:

    • +1,您还可以使用SqlBulkCopy.BatchSizeSqlBulkCopy.NotifyAfterSqlBulkCopy.SqlRowsCopied 来尝试识别出现问题的第一行,然后检查该行。
    【解决方案3】:

    您可以尝试自己转换数据,然后再将其添加到DataSet。这应该突出显示不可靠的数据。

    【讨论】:

    • 谢谢,我会去的。这将允许我向我的系统用户实际呈现可用的消息。
    【解决方案4】:

    几个月前我遇到了类似的问题。我解决它的方法是确保我的 DataSet 中只有一条记录用于测试,然后将所有 DateTime 字符串设置为一个简单的日期(例如 01/01/2000)。如果您仍然收到错误,那么它将归结为数据库中 DateTime 字段的格式与一般级别的字符串格式,而不是字符串中的单个日期。

    就我而言,这是由于老式的英国和美国日期格式!我的数据库使用的是英国,但一些字符串日期使用的是美国格式。

    【讨论】:

    • 那是因为你离日本很近,而且他们确实有一致的 lsb 到 msb 约定
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2022-01-11
    • 2017-09-20
    相关资源
    最近更新 更多