​
        /// <summary>
        /// 通过 SqlBulkCopy 实现高效批量插入(适用于 SQL Server,支持取消)
        /// </summary>
        /// <param name="insertTable">要插入的数据表(每行对应一条记录)</param>
        /// <param name="cancellationToken">取消令牌</param>
        /// <returns>成功插入的行数</returns>
        public async Task<int> BulkBaseInsertAsync(DataTable insertTable, CancellationToken cancellationToken = default)
        {
            if (insertTable.Rows.Count == 0)
                return 0;
​
            var tableName = insertTable.TableName;
​
            // 1. 线程安全:同步表结构(只执行一次 DDL)
            // await EnsureTableStructureAsync(insertTable, cancellationToken);
​
            // 2. 创建数据库连接(连接字符串应从类成员或配置中获取)
            using (var connection = _database.CreateConnection() as SqlConnection)
            {
                await connection.OpenAsync(cancellationToken);
​
                // 3. 配置 SqlBulkCopy
                using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, null))
                {
                    bulkCopy.DestinationTableName = tableName;
                    bulkCopy.BatchSize = insertTable.Rows.Count;           // 也可根据数据量动态调整
                    bulkCopy.EnableStreaming = true;                       // 大数据集时提升性能
                    bulkCopy.BulkCopyTimeout = 0;                           // 0 表示无超时,或根据需求设置
​
                    // 4. 列映射(确保 DataTable 列与数据库表列匹配)
                    foreach (DataColumn col in insertTable.Columns)
                    {
                        bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
                    }
​
                    // 5. 异步执行批量插入(支持 CancellationToken)
                    await bulkCopy.WriteToServerAsync(insertTable, cancellationToken);
                }
            }
​
            // 6. 若执行成功,返回总行数
            return insertTable.Rows.Count;
        }