mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +08:00
- 修复 fsql.Ado.ExecuteDataTable 当记录不存在时,未返回 Columns 设置 403;
This commit is contained in:
parent
c7cd1cda3b
commit
78ac7ab6ae
@ -125,6 +125,13 @@
|
||||
清空状态数据
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbSet`1.RemoveAsync(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
|
||||
<summary>
|
||||
根据 lambda 条件删除数据
|
||||
</summary>
|
||||
<param name="predicate"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.DbSet`1.Add(`0)">
|
||||
<summary>
|
||||
添加
|
||||
@ -513,5 +520,14 @@
|
||||
<param name="that"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
|
||||
<summary>
|
||||
批量注入 Repository,可以参考代码自行调整
|
||||
</summary>
|
||||
<param name="services"></param>
|
||||
<param name="globalDataFilter"></param>
|
||||
<param name="assemblies"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
|
@ -188,7 +188,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
}
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
}, null, cmdType, cmdText, cmdParms);
|
||||
return NativeTuple.Create(ret1, ret2);
|
||||
}
|
||||
|
||||
@ -273,7 +273,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
}
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
}, null, cmdType, cmdText, cmdParms);
|
||||
return NativeTuple.Create(ret1, ret2, ret3);
|
||||
}
|
||||
|
||||
@ -381,7 +381,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
}
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
}, null, cmdType, cmdText, cmdParms);
|
||||
return NativeTuple.Create(ret1, ret2, ret3, ret4);
|
||||
}
|
||||
|
||||
@ -512,7 +512,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
}
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
}, null, cmdType, cmdText, cmdParms);
|
||||
return NativeTuple.Create(ret1, ret2, ret3, ret4, ret5);
|
||||
}
|
||||
#endregion
|
||||
@ -522,8 +522,8 @@ namespace FreeSql.Internal.CommonProvider
|
||||
public void ExecuteReader(DbConnection connection, DbTransaction transaction, Action<FetchCallbackArgs<DbDataReader>> fetchHandler, string cmdText, object parms = null) => ExecuteReader(connection, transaction, fetchHandler, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
|
||||
public void ExecuteReader(Action<FetchCallbackArgs<DbDataReader>> fetchHandler, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReader(null, null, fetchHandler, cmdType, cmdText, cmdParms);
|
||||
public void ExecuteReader(DbTransaction transaction, Action<FetchCallbackArgs<DbDataReader>> fetchHandler, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReader(null, transaction, fetchHandler, cmdType, cmdText, cmdParms);
|
||||
public void ExecuteReader(DbConnection connection, DbTransaction transaction, Action<FetchCallbackArgs<DbDataReader>> fetchHandler, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReaderMultiple(1, connection, transaction, (fetch, result) => fetchHandler(fetch), cmdType, cmdText, cmdParms);
|
||||
void ExecuteReaderMultiple(int multipleResult, DbConnection connection, DbTransaction transaction, Action<FetchCallbackArgs<DbDataReader>, int> fetchHandler, CommandType cmdType, string cmdText, params DbParameter[] cmdParms)
|
||||
public void ExecuteReader(DbConnection connection, DbTransaction transaction, Action<FetchCallbackArgs<DbDataReader>> fetchHandler, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReaderMultiple(1, connection, transaction, (fetch, result) => fetchHandler(fetch), null, cmdType, cmdText, cmdParms);
|
||||
void ExecuteReaderMultiple(int multipleResult, DbConnection connection, DbTransaction transaction, Action<FetchCallbackArgs<DbDataReader>, int> fetchHandler, Action<DbDataReader, int> schemaHandler, CommandType cmdType, string cmdText, params DbParameter[] cmdParms)
|
||||
{
|
||||
if (string.IsNullOrEmpty(cmdText)) return;
|
||||
var dt = DateTime.Now;
|
||||
@ -586,7 +586,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
LoggerException(pool, pc, new Exception($"连接失败,准备切换其他可用服务器"), dt, logtxt, false);
|
||||
pc.cmd.Parameters.Clear();
|
||||
if (DataType == DataType.Sqlite) pc.cmd.Dispose();
|
||||
ExecuteReaderMultiple(multipleResult, connection, transaction, fetchHandler, cmdType, cmdText, cmdParms);
|
||||
ExecuteReaderMultiple(multipleResult, connection, transaction, fetchHandler, schemaHandler, cmdType, cmdText, cmdParms);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -606,9 +606,15 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var fetch = new FetchCallbackArgs<DbDataReader> { Object = dr };
|
||||
while (true)
|
||||
{
|
||||
bool isfirst = true;
|
||||
while (true)
|
||||
{
|
||||
bool isread = dr.Read();
|
||||
if (schemaHandler != null && isfirst)
|
||||
{
|
||||
isfirst = false;
|
||||
schemaHandler(dr, resultIndex);
|
||||
}
|
||||
if (isread == false) break;
|
||||
|
||||
if (fetchHandler != null)
|
||||
@ -676,19 +682,18 @@ namespace FreeSql.Internal.CommonProvider
|
||||
DataTable dt = null;
|
||||
ExecuteReaderMultiple(16, connection, transaction, (fetch, result) =>
|
||||
{
|
||||
if (ret.Tables.Count <= result)
|
||||
{
|
||||
dt = ret.Tables.Add();
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dt.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
|
||||
dt.Columns.Add(name, fetch.Object.GetFieldType(a));
|
||||
}
|
||||
}
|
||||
object[] values = new object[dt.Columns.Count];
|
||||
fetch.Object.GetValues(values);
|
||||
dt.Rows.Add(values);
|
||||
}, (dr, result) =>
|
||||
{
|
||||
dt = ret.Tables.Add();
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dt.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
|
||||
dt.Columns.Add(name, dr.GetFieldType(a));
|
||||
}
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
return ret;
|
||||
}
|
||||
@ -700,18 +705,19 @@ namespace FreeSql.Internal.CommonProvider
|
||||
public DataTable ExecuteDataTable(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms)
|
||||
{
|
||||
var ret = new DataTable();
|
||||
ExecuteReader(connection, transaction, fetch =>
|
||||
ExecuteReaderMultiple(1, connection, transaction, (fetch, result) =>
|
||||
{
|
||||
if (ret.Columns.Count == 0)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (ret.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
|
||||
ret.Columns.Add(name, fetch.Object.GetFieldType(a));
|
||||
}
|
||||
object[] values = new object[ret.Columns.Count];
|
||||
fetch.Object.GetValues(values);
|
||||
ret.Rows.Add(values);
|
||||
}, (dr, result) =>
|
||||
{
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (ret.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
|
||||
ret.Columns.Add(name, dr.GetFieldType(a));
|
||||
}
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
return ret;
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
break;
|
||||
}
|
||||
return Task.FromResult(false);
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
}, null, cmdType, cmdText, cmdParms);
|
||||
return NativeTuple.Create(ret1, ret2);
|
||||
}
|
||||
|
||||
@ -196,7 +196,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
break;
|
||||
}
|
||||
return Task.FromResult(false);
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
}, null, cmdType, cmdText, cmdParms);
|
||||
return NativeTuple.Create(ret1, ret2, ret3);
|
||||
}
|
||||
|
||||
@ -305,7 +305,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
break;
|
||||
}
|
||||
return Task.FromResult(false);
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
}, null, cmdType, cmdText, cmdParms);
|
||||
return NativeTuple.Create(ret1, ret2, ret3, ret4);
|
||||
}
|
||||
|
||||
@ -437,7 +437,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
break;
|
||||
}
|
||||
return Task.FromResult(false);
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
}, null, cmdType, cmdText, cmdParms);
|
||||
return NativeTuple.Create(ret1, ret2, ret3, ret4, ret5);
|
||||
}
|
||||
#endregion
|
||||
@ -447,8 +447,8 @@ namespace FreeSql.Internal.CommonProvider
|
||||
public Task ExecuteReaderAsync(DbConnection connection, DbTransaction transaction, Func<FetchCallbackArgs<DbDataReader>, Task> fetchHandler, string cmdText, object parms = null) => ExecuteReaderAsync(connection, transaction, fetchHandler, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
|
||||
public Task ExecuteReaderAsync(Func<FetchCallbackArgs<DbDataReader>, Task> fetchHandler, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReaderAsync(null, null, fetchHandler, cmdType, cmdText, cmdParms);
|
||||
public Task ExecuteReaderAsync(DbTransaction transaction, Func<FetchCallbackArgs<DbDataReader>, Task> fetchHandler, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReaderAsync(null, transaction, fetchHandler, cmdType, cmdText, cmdParms);
|
||||
public Task ExecuteReaderAsync(DbConnection connection, DbTransaction transaction, Func<FetchCallbackArgs<DbDataReader>, Task> fetchHandler, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReaderMultipleAsync(1, connection, transaction, (fetch, result) => fetchHandler(fetch), cmdType, cmdText, cmdParms);
|
||||
async Task ExecuteReaderMultipleAsync(int multipleResult, DbConnection connection, DbTransaction transaction, Func<FetchCallbackArgs<DbDataReader>, int, Task> fetchHandler, CommandType cmdType, string cmdText, params DbParameter[] cmdParms)
|
||||
public Task ExecuteReaderAsync(DbConnection connection, DbTransaction transaction, Func<FetchCallbackArgs<DbDataReader>, Task> fetchHandler, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReaderMultipleAsync(1, connection, transaction, (fetch, result) => fetchHandler(fetch), null, cmdType, cmdText, cmdParms);
|
||||
async Task ExecuteReaderMultipleAsync(int multipleResult, DbConnection connection, DbTransaction transaction, Func<FetchCallbackArgs<DbDataReader>, int, Task> fetchHandler, Action<DbDataReader, int> schemaHandler, CommandType cmdType, string cmdText, params DbParameter[] cmdParms)
|
||||
{
|
||||
if (string.IsNullOrEmpty(cmdText)) return;
|
||||
var dt = DateTime.Now;
|
||||
@ -511,7 +511,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
LoggerException(pool, pc, new Exception($"连接失败,准备切换其他可用服务器"), dt, logtxt, false);
|
||||
pc.cmd.Parameters.Clear();
|
||||
if (DataType == DataType.Sqlite) pc.cmd.Dispose();
|
||||
await ExecuteReaderMultipleAsync(multipleResult, connection, transaction, fetchHandler, cmdType, cmdText, cmdParms);
|
||||
await ExecuteReaderMultipleAsync(multipleResult, connection, transaction, fetchHandler, schemaHandler, cmdType, cmdText, cmdParms);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -531,9 +531,15 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var fetch = new FetchCallbackArgs<DbDataReader> { Object = dr };
|
||||
while (true)
|
||||
{
|
||||
bool isfirst = true;
|
||||
while (true)
|
||||
{
|
||||
bool isread = await dr.ReadAsync();
|
||||
if (schemaHandler != null && isfirst)
|
||||
{
|
||||
isfirst = false;
|
||||
schemaHandler(dr, resultIndex);
|
||||
}
|
||||
if (isread == false) break;
|
||||
|
||||
if (fetchHandler != null)
|
||||
@ -599,19 +605,18 @@ namespace FreeSql.Internal.CommonProvider
|
||||
DataTable dt = null;
|
||||
await ExecuteReaderMultipleAsync(16, connection, transaction, async (fetch, result) =>
|
||||
{
|
||||
if (ret.Tables.Count <= result)
|
||||
{
|
||||
dt = ret.Tables.Add();
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dt.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
|
||||
dt.Columns.Add(name, fetch.Object.GetFieldType(a));
|
||||
}
|
||||
}
|
||||
object[] values = new object[dt.Columns.Count];
|
||||
for (int a = 0; a < values.Length; a++) if (!await fetch.Object.IsDBNullAsync(a)) values[a] = await fetch.Object.GetFieldValueAsync<object>(a);
|
||||
dt.Rows.Add(values);
|
||||
}, (dr, result) =>
|
||||
{
|
||||
dt = ret.Tables.Add();
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dt.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
|
||||
dt.Columns.Add(name, dr.GetFieldType(a));
|
||||
}
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
return ret;
|
||||
}
|
||||
@ -623,18 +628,19 @@ namespace FreeSql.Internal.CommonProvider
|
||||
async public Task<DataTable> ExecuteDataTableAsync(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms)
|
||||
{
|
||||
var ret = new DataTable();
|
||||
await ExecuteReaderAsync(connection, transaction, async fetch =>
|
||||
await ExecuteReaderMultipleAsync(1, connection, transaction, async (fetch, result) =>
|
||||
{
|
||||
if (ret.Columns.Count == 0)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (ret.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
|
||||
ret.Columns.Add(name, fetch.Object.GetFieldType(a));
|
||||
}
|
||||
object[] values = new object[ret.Columns.Count];
|
||||
for (int a = 0; a < values.Length; a++) if (!await fetch.Object.IsDBNullAsync(a)) values[a] = await fetch.Object.GetFieldValueAsync<object>(a);
|
||||
ret.Rows.Add(values);
|
||||
}, (dr, result) =>
|
||||
{
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (ret.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
|
||||
ret.Columns.Add(name, dr.GetFieldType(a));
|
||||
}
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user