.NET IBM DB2BulkCopy - определите, произошла ли ошибка при вставке - PullRequest
0 голосов
/ 28 февраля 2019

Ниже приведена функция, которую я использую для массовой вставки в DB2.Свойство Errors класса DB2BulkCopy возвращает DB2ErrorsCollection (см. Мою локальную переменную errorCollection).Проблема в том, что единственные ошибки, которые меня беспокоят, это те, которые не позволяют вставить строку в таблицу.

Пример ошибки, которую я получаю, что не заботиться о том, 01517 - «Символ, который не может быть преобразован, был заменен заменяющим символом».Это возвращается в объекте DB2ErrorCollection, но меня это не волнует.

Есть ли способ отфильтровать только ошибки, которые не позволили бы вставить строку?

public static DB2ErrorCollection RunDb2BulkCopy(DB2Connection conn, DataTable table, string tableName)
{
    DB2ErrorCollection errorCollection;

    using (var bc = new DB2BulkCopy(conn))
    {
        //Have to provide column mappings below - requirement. This code assumes that the DataTable and
        //the DB2 table have the same column names.
        foreach (DataColumn c in table.Columns)
        {
            bc.ColumnMappings.Add(new DB2BulkCopyColumnMapping(c.ColumnName, c.ColumnName));
        }

        bc.DestinationTableName = tableName;
        bc.WriteToServer(table);

        errorCollection = bc.Errors;
    }

    return errorCollection;
}

1 Ответ

0 голосов
/ 28 февраля 2019

Значения SQLSTATE (например, 01517) имеют первые два символа, обозначающие классификацию или код класса.

'00 '- это успех.

'01' в вашем случае - этопредупреждение.

другие значения кода класса являются ошибками, которые вы, вероятно, не должны игнорировать.

Полный список кодов классов здесь и содержит ссылки на таблицы, перечисляющиекаждый код для кода класса.

Для решения таких вопросов могут существовать классы / подклассы языкового уровня.

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