SqlDataAdapter、SqlBulkCopy和DataTable与NetTopologySuite.IO.SqlServerBytes的集成

4

我正在尝试在.net core 中使用SqlBulkCopy,但是由于我使用了一个几何列,所以以下代码需要 Microsoft.SqlServer.Types,它不完全兼容 .net core,特别是在 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,但在这种情况下,魔法发生在 SqlDataAdapter 的某个地方,我不知道如何覆盖它。

我试图手动创建 DataTable 列,而不使用 Fill(),但似乎无论我指定什么类型,稍后在 SqlBulkCopy 中都会出现错误。

来自数据源的类型 XYZ 的给定值无法转换为指定目标列的 udt 类型

我尝试使用 SqlBytesbyte[],但似乎都不起作用。

更新 1: 我通过手动创建具有 byte[] 作为该列类型的 DataTable 来使其正常工作。

仍然希望有一种方法可以使用 adapter.Fill(dt); 或类似方法,以便我不必手动列出所有列。


// 创建表 DataTable OrdersTable = new DataTable("Orders"); // 构建订单模式 ordersTable.Columns.Add("ID", Type.GetType("System.Int32")); ordersTable.Columns.Add("Name", Type.GetType("System.String")); ordersTable.Columns.Add("Amount", Type.GetType("System.Int32"));foreach(var r in td.Rows) { DataRow dr = OrdersTable.NewRow();dr[0] = r[0] // 两个表的列应该是连续的 . .ordersTable.rows.add(dr); } - LDS
@LDS,使用手动创建的DataTable可以工作,但我希望有一种不需要编写所有列的方法。使用Fill()的优点是它可以从数据库中获取所有类型。 - MuhKuh
1个回答

0

    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://learn.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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接