Поддерживает ли SqlBulkCopy Graphtables в MsSql 2017? - PullRequest
0 голосов
/ 23 января 2019

Я пробую новую поддержку базы данных графов, которая была добавлена ​​в 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 голосов
/ 23 января 2019

SqlBulkCopy не имеет специальной обработки для DataTable; он сопоставит столбцы для копирования из источника в место назначения по порядковому положению, так же как и для других перегрузок, которые принимают другие источники. Поэтому настройка сопоставления идентификаторов по имени не является обязательной:

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

В случае таблиц графиков и узлов проблема несколько более заметна, чем обычно, поскольку внутренние столбцы, поддерживающие структуры (которые вы обычно не используете явно), появляются в начале списка столбцов, поэтому это почти гарантирует провал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...