我正在尝试新的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);
}
现在,我想知道我做错了什么还是尚不支持。
答案 0 :(得分:1)
SqlBulkCopy
对DataTable
没有特殊处理;它将按顺序映射要从源复制到目标的列,就像处理其他源的其他重载一样。因此,按名称设置身份映射不是可选的:
foreach (DataColumn c in dataTable.Columns) {
sqlBulkCopy.ColumnMappings.Add(c.ColumnName, c.ColumnName);
}
使用图形表和节点表时,此问题比平时更引人注意,因为支持结构的内部列(通常不会显式使用)显示在列列表的 start 处,这样几乎可以保证失败。