SqlBulkCopy是否在MsSql 2017中支持Graphtables?

时间:2019-01-23 15:48:42

标签: c# sql-server sqlbulkcopy sql-server-2017 sql-server-2017-graph

我正在尝试新的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);
}

现在,我想知道我做错了什么还是尚不支持。

1 个答案:

答案 0 :(得分:1)

SqlBulkCopyDataTable没有特殊处理;它将按顺序映射要从源复制到目标的列,就像处理其他源的其他重载一样。因此,按名称设置身份映射不是可选的:

foreach (DataColumn c in dataTable.Columns) {
    sqlBulkCopy.ColumnMappings.Add(c.ColumnName, c.ColumnName);
}

使用图形表和节点表时,此问题比平时更引人注意,因为支持结构的内部列(通常不会显式使用)显示在列列表的 start 处,这样几乎可以保证失败。