SqlDataAdapter, SqlBulkCopy и DataTable с NetTopologySuite.IO.SqlServerBytes - PullRequest
3 голосов
/ 13 июля 2020

Я пытаюсь использовать SqlBulkCopy с ядром. net, но поскольку я использую столбец геометрии, следующий код требует Microsoft.SqlServer.Types, который не полностью совместим с ядром. net, особенно на Linux .

using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT TOP 0 * FROM " + tableName, sqlConnection))
{
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    return dt;
}

Без зависимости Fill() не работает, так как не может найти тип.

Обычно я использую NetTopologySuite.IO.SqlServerBytes, но в этом случае происходит ошибка c где-то в SqlDataAdapter, и я не знаю, как его перезаписать.

Я пытался создать столбцы DataTable вручную без использования Fill(), но похоже, какой бы тип я ни указывал, позже я получаю сообщение об ошибке в SqlBulkCopy .

Данное значение типа XYZ из источника данных не может быть преобразовано в тип udt указанного целевого столбца

Я пробовал с SqlBytes и byte[] , но ничего не работает.

Обновление 1: Я получил его, работая с вручную созданным DataTable с byte[] в качестве типа для этого столбца.

Тем не менее было бы неплохо ч Найдите способ использовать adapter.Fill(dt); или аналогичный, чтобы мне не приходилось вручную перечислять все столбцы.

1 Ответ

0 голосов
/ 15 июля 2020

    using (SqlDataAdapter da = new SqlDataAdapter("SELECT TOP 5 * FROM " + tableName, sqlConnection)
    
    {
        using (SqlCommandBuilder builder = new SqlCommandBuilder(da))
        {

            DataTable dt = new DataTable();
            DataSet dataSet = new DataSet();
            dt = dgPurchase.DataSource as DataTable;
            //here assign the data table
                da.Fill(dataSet, dt);
            
            da.UpdateCommand = builder.GetUpdateCommand(true);

            //da.InsertCommand = builder.GetInsertCommand(true);
            //If new row then open it
                    da.Update(dataSet, dt);

        }
     }

 // Can update though parameters .Follow the link
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/updating-data-sources-with-dataadapters

//Useing inline code .Follow the link
http://csharp.net-informations.com/dataadapter/updatecommand-sqlserver.htm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...