【发布时间】:2019-06-17 06:17:02
【问题描述】:
我正在试用新的graphdatabase support that was added to Microsoft SQL Server 2017
我想使用 SqlBulkCopy 将几千个节点插入到节点表中。
但是我总是错误:
Column '$node_id_DB218B0EAE294E37804103CF4E82BCD2' does not allow DBNull.Value.
我的表是这样创建的
CREATE TABLE [Product] (
[id] bigint,
[name] nvarchar(max),
[partsNum] bigint,
[price] float) AS NODE;
CREATE TABLE [DependsOn] (
[weight] float,
[id] bigint) AS EDGE;`
我准备了一个包含所有属性的数据表并像这样调用 SqlBulkCopy:
using (var bulkCopy = new SqlBulkCopy(Connection, SqlBulkCopyOptions.TableLock | SqlBulkCopyOptions.FireTriggers, null)
{
DestinationTableName = "Product"
})
{
bulkCopy.WriteToServer(_dataTable);
}
现在我想知道是我做错了什么还是现在还不支持。
【问题讨论】:
-
您没有分配任何
.ColumnMappings。您可能想要这样做,否则SqlBulkCopy会做坏事,例如假设所有列都需要批量复制,并且完全按照表中给出的顺序进行。图表包含一些内部创建的列,这些列肯定会破坏这一点。 (您可能认为SqlBulkCopy足够聪明,可以按名称映射列,而无需在传递DataTable时告诉它。不幸的是,事实并非如此。) -
哦,如果数据表具有完全相同的列,我希望它不需要映射。让我尝试添加它。
-
你是对的。是缺少映射...您要发布答案以便我标记它吗?
-
我觉得应该有这个问题的副本(不一定专门关于图表),但按照惯例,似乎不可能在 SO 上找到一个......所以我也可以。如果有人发现了骗子,请适当关闭。
标签: c# sql-server-2017 sqlbulkcopy sql-graph sql-server-2017-graph