SqlBulkCopy无法将“0”,“1”bool值解析为数据库表上的BIT

时间:2010-10-07 18:07:39

标签: sql-server types casting

我正在使用我的自定义CSVDataReader:IDataReader {}在数据库表中插入批量值。

每个数据类型,但Bit(来自“1”/“0”)都被完美地解析。我收到以下错误 “数据源中String类型的值无法转换为类型位”,而将0或1解析为bool

如果我将这些值更改为“true”/“false”。它没有任何问题。

我无法更改CSV文件。目前,我在迭代期间将该特定列从“0”/“1”替换为“false”/“True”。但这不是一个优雅的解决方案。

请帮忙!

由于 Panks

2 个答案:

答案 0 :(得分:0)

我猜你发送"1""0"而不是10

仅供参考,SQL Server将接受truefalse

答案 1 :(得分:0)

我遇到了类似的问题,其中IEnumerable的匿名类型无法填充我的数据库表。结果发现DataTable中字段的顺序与数据库表中列的顺序不匹配。在这一点上,我不明白为什么列的顺序很重要,因为可以使用列名正确匹配它们。

无论如何,我的列不匹配是使用FastMember NuGet程序包来快速填充DataTable的副作用,它会按字母顺序对引擎盖进行排序!解决方案是将我的匿名类型替换为一个小的声明的类,该类在其属性上使用Ordinal属性:

public class Row
{
    [Ordinal(0)] public string ColumnA { get; set; }
    [Ordinal(1)] public string SecondColumn { get; set; }
    [Ordinal(2)] public string ColumnC { get; set; }
}

您可以阅读有关此订购问题here的更多信息,用户 dyatchenko 创建了一个拉取请求以支持自定义属性订购。最终,这又合并回了主人。