1

我正在尝试添加到 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);
}

现在我想知道我是否做错了什么,或者这是否还不受支持。

4

1 回答 1

1

SqlBulkCopyDataTable;没有特殊处理 它将映射列以按序号位置从源复制到目标,就像它对采用其他源的其他重载所做的那样。因此,按名称设置身份映射不是可选的:

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

对于图形和节点表,问题比平时更明显,因为支持结构的内部列(通常不会显式使用)出现在列列表的开头,因此几乎可以保证失败。

于 2019-01-23T16:50:14.457 回答