Fastest<DataTable>使用批量更新或新增 返回

SqlSugar
6 228

                IFastest<DataTable> fastestTable = db.Fastest<DataTable>().AS(dateBaseTableName);

                if (InsertTable != null && InsertTable.Rows.Count > 0)

                {

                    fastestTable.BulkCopy(dateBaseTableName, InsertTable);

                }

                if (UpdateTable != null && UpdateTable.Rows.Count > 0)

                    fastestTable.BulkUpdate(UpdateTable, new string[] { "Id" });

第一个if执行BulkCopy后,再执行BulkUpdate报 A DataTable named '[DemandPlanLine_2022_11]' already belongs to this DataSet."
ex.StackTrace:
   在 System.Data.DataTableCollection.RegisterName(String name, String tbNamespace)
   在 System.Data.DataTable.set_TableName(String value)
   在 SqlSugar.FastestProvider`1.<_BulkUpdate>d__27.MoveNext()
   在 SqlSugar.FastestProvider`1.<BulkUpdateAsync>d__24.MoveNext()
   在 SqlSugar.FastestProvider`1.BulkUpdate(DataTable dataTable, String[] whereColumns)
   在 Innolight.SPMS.Web.Helper.SqlBulkCopyHelper.SqlSugarBulkUpdate(DataTable InsertTable, DataTable UpdateTable, String dateBaseTableName, List`1 updateColumnName) 在 E:\Git_Project\Innolight.SPMS\Source Code\Innolight.SPMS.Web\Helper\SqlBulkCopyHelper.cs 中: 第 160 行
   实际先新增一张表数据,再更新数据,操作同一张表。传入的DataTable名不同

热忱回答6

  • fate sta fate sta VIP0
    2022/12/2

     

                    if (InsertTable != null && InsertTable.Rows.Count > 0)

                    {

                        db.Fastest<DataTable>().AS(dateBaseTableName).BulkCopy(InsertTable);

                    }

                    if (UpdateTable != null && UpdateTable.Rows.Count > 0)

                         db.Fastest<DataTable>().AS(dateBaseTableName).BulkUpdate(UpdateTable,new string[] { "Id" });

    这样看看,如果还有问题需要提供完整DEMO

    0 回复
  • fate sta fate sta VIP0
    2022/12/2

    SqlSugar升级最新

    0 回复
  • @fate sta:版本为:SqlSugarCore.dll:5.1.3.35

    0 回复
  • @fate sta:这样还是不行,

    @fate sta

            /// <summary>

            /// SqlSugar 批量更新/新增

            /// </summary>

            /// <param name="dataTable"></param>

            /// <param name="dateBaseTableName"></param>

            /// <param name="updateColumnName"></param>

            public static void SqlSugarBulkUpdate(DataTable InsertTable, DataTable UpdateTable, string dateBaseTableName,List<string> updateColumnName) 

            {

                try

                {

                    IFastest<DataTable> fastestTable = SugarClient.Default.Context.Fastest<DataTable>().AS(dateBaseTableName);

                    if (InsertTable != null && InsertTable.Rows.Count > 0)

                    {

                        fastestTable.BulkCopy(dateBaseTableName, InsertTable);

                    }

                    if (UpdateTable != null && UpdateTable.Rows.Count > 0)

                        fastestTable.BulkUpdate(UpdateTable, new string[] { "Id" });

                }

                catch (Exception ex)

                {

                    throw;

                }

            }

    这里传入了两个DataTable,Table名不一样。SugarClient.Default.Context,是封装了一层,实际调用image.png

    0 回复
  • fate sta fate sta VIP0
    2022/12/2

    https://www.donet5.com/Home/Doc?typeId=2366 按模提供DEMO 可以上传的 删掉BIN和OBJ

    0 回复
  • @fate sta:感谢下午协助,已找到原因,InsertTable和UpdateTable  同时加入DataSet,再取出后放在BulkUpdate和BulkCopy同时使用,会出现问题:

    A DataTable named 'DataTableName' already belongs to this DataSet.

    错误写法如下:

    image.png

    正确写法如下:

    1669974190840.png

    0 回复