fix: ToDataTable

This commit is contained in:
nsnail 2024-11-13 20:55:56 +08:00
parent 013f35e296
commit 3b0e62338d
4 changed files with 8 additions and 8 deletions

View File

@ -168,7 +168,7 @@ namespace FreeSql
/// IgnoreColumns、InsertColumns /// IgnoreColumns、InsertColumns
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
DataTable ToDataTable(); DataTable ToDataTable(string tableName);
#if net40 #if net40
#else #else

View File

@ -691,10 +691,10 @@ namespace FreeSql.Internal.CommonProvider
return sb.ToString(); return sb.ToString();
} }
public DataTable ToDataTable() public DataTable ToDataTable(string tableName = null)
{ {
var dt = new DataTable(); var dt = new DataTable();
dt.TableName = TableRuleInvoke(); dt.TableName = tableName ?? TableRuleInvoke();
var dtCols = new List<NativeTuple<ColumnInfo, Type, bool>>(); var dtCols = new List<NativeTuple<ColumnInfo, Type, bool>>();
foreach (var col in _table.ColumnsByPosition) foreach (var col in _table.ColumnsByPosition)
{ {

View File

@ -37,7 +37,7 @@
<PackageReference Include="System.Data.SqlClient" Version="4.8.5" /> <PackageReference Include="System.Data.SqlClient" Version="4.8.5" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'net8.0' or '$(TargetFramework)' == 'net7.0' or '$(TargetFramework)' == 'net6.0'"> <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'net8.0' or '$(TargetFramework)' == 'net7.0' or '$(TargetFramework)' == 'net6.0'">
<PackageReference Include="Microsoft.Data.SqlClient" Version="2.1.4" /> <PackageReference Include="Microsoft.Data.SqlClient" Version="2.1.7" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -243,13 +243,13 @@ public static partial class FreeSqlSqlServerGlobalExtensions
/// <param name="copyOptions"></param> /// <param name="copyOptions"></param>
/// <param name="batchSize"></param> /// <param name="batchSize"></param>
/// <param name="bulkCopyTimeout"></param> /// <param name="bulkCopyTimeout"></param>
public static void ExecuteSqlBulkCopy<T>(this IInsert<T> that, SqlBulkCopyOptions copyOptions = SqlBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null) where T : class public static void ExecuteSqlBulkCopy<T>(this IInsert<T> that, SqlBulkCopyOptions copyOptions = SqlBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null, string tableName = null) where T : class
{ {
var insert = that as FreeSql.SqlServer.Curd.SqlServerInsert<T>; var insert = that as FreeSql.SqlServer.Curd.SqlServerInsert<T>;
if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteSqlBulkCopy", "SqlServer")); if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteSqlBulkCopy", "SqlServer"));
if (insert._insertIdentity) copyOptions = copyOptions | SqlBulkCopyOptions.KeepIdentity; if (insert._insertIdentity) copyOptions = copyOptions | SqlBulkCopyOptions.KeepIdentity;
var dt = that.ToDataTable(); var dt = that.ToDataTable(tableName);
if (dt.Rows.Count == 0) return; if (dt.Rows.Count == 0) return;
Action<SqlBulkCopy> writeToServer = bulkCopy => Action<SqlBulkCopy> writeToServer = bulkCopy =>
@ -337,13 +337,13 @@ public static partial class FreeSqlSqlServerGlobalExtensions
var state = ExecuteSqlBulkCopyState(update); var state = ExecuteSqlBulkCopyState(update);
return UpdateProvider.ExecuteBulkUpdateAsync(update, state, insert => insert.ExecuteSqlBulkCopyAsync(copyOptions, batchSize, bulkCopyTimeout, cancellationToken)); return UpdateProvider.ExecuteBulkUpdateAsync(update, state, insert => insert.ExecuteSqlBulkCopyAsync(copyOptions, batchSize, bulkCopyTimeout, cancellationToken));
} }
async public static Task ExecuteSqlBulkCopyAsync<T>(this IInsert<T> that, SqlBulkCopyOptions copyOptions = SqlBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null, CancellationToken cancellationToken = default) where T : class async public static Task ExecuteSqlBulkCopyAsync<T>(this IInsert<T> that, SqlBulkCopyOptions copyOptions = SqlBulkCopyOptions.Default, int? batchSize = null, int? bulkCopyTimeout = null, CancellationToken cancellationToken = default, string tableName = null) where T : class
{ {
var insert = that as FreeSql.SqlServer.Curd.SqlServerInsert<T>; var insert = that as FreeSql.SqlServer.Curd.SqlServerInsert<T>;
if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteSqlBulkCopyAsync", "SqlServer")); if (insert == null) throw new Exception(CoreStrings.S_Features_Unique("ExecuteSqlBulkCopyAsync", "SqlServer"));
if (insert._insertIdentity) copyOptions = copyOptions | SqlBulkCopyOptions.KeepIdentity; if (insert._insertIdentity) copyOptions = copyOptions | SqlBulkCopyOptions.KeepIdentity;
var dt = that.ToDataTable(); var dt = that.ToDataTable(tableName);
if (dt.Rows.Count == 0) return; if (dt.Rows.Count == 0) return;
Func<SqlBulkCopy, Task> writeToServerAsync = bulkCopy => Func<SqlBulkCopy, Task> writeToServerAsync = bulkCopy =>