gpt4 book ai didi

c# - 使用数据表和 SqlBulkCopy 获取将 bool 值写入 sql 的异常

转载 作者:太空狗 更新时间:2023-10-29 23:46:20 25 4
gpt4 key购买 nike

它适用于所有其他数据类型,但我无法让它适用于“位”列。

这是我用于批量写入的 SQL:

using (var bulk = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity & SqlBulkCopyOptions.KeepNulls))
{
bulk.BatchSize = 2000;
bulk.DestinationTableName = targetTable;
bulk.WriteToServer(dataTable);
}

这是我的数据表:

    DataTable dt = new DataTable();

dt.Clear();

dt.Columns.Add("MyBool", typeof(bool)); // Tried with and without typeof(bool)

return dt;

这就是我在将行添加到数据表之前构造该行的方式。

personAssociationRow["MyBool"] = true;

异常在 WriteToServer 行上抛出,并且取决于是否指定了 typeof(bool) 是:

无法将值 NULL 插入表“MyBool”列,但 intellisense/debugger 将该值显示为 true

来自数据源的 String 类型的给定值无法转换为指定目标列的 int 类型。 这是当 intellisense/debugger 中的值变为 "True" 即一个字符串。

在数据库中,该列被定义为并且不允许空值。

我有什么想法可以让我的 bool 值起作用吗?

编辑:刚刚发现并尝试将 SqlBoolean 作为一种类型,但是没有用,它说 The given value of type SqlBoolean from the data source cannot be converted to type int of指定的目标列。 这表明 int 会起作用,但它似乎不起作用。

编辑:我怀疑问题在于它认为底层数据库是 int 类型,而紫色蜡笔很清楚类型是 bit,因此出现错误消息关于它不转换为基础类型 int

最佳答案

遇到同样的问题:将 bool 列设置为 true/false 被批量复制忽略,所有值都设置为 null。之前的答案有助于解决它,但我必须为所有列添加映射才能使其正常工作:

foreach (DataColumn column in table.Columns) {
sqlBulk.ColumnMappings.Add(column.ColumnName, column.ColumnName);
}
sqlBulk.WriteToServer(table);

关于c# - 使用数据表和 SqlBulkCopy 获取将 bool 值写入 sql 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18531158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com