mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 20:38:16 +08:00
- 增加 ISelect ToChunk 停止读取的逻辑控制 #360;
This commit is contained in:
@ -109,15 +109,15 @@ namespace FreeSql.Internal.CommonProvider
|
||||
string flag = null;
|
||||
int[] indexes = null;
|
||||
var props = GetQueryTypeProperties(type);
|
||||
ExecuteReader(connection, transaction, dr =>
|
||||
ExecuteReader(connection, transaction, fetch =>
|
||||
{
|
||||
if (indexes == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -125,7 +125,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes = props.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag = sbflag.ToString();
|
||||
}
|
||||
ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, dr, 0, _util).Value);
|
||||
ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, fetch.Object, 0, _util).Value);
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
return ret;
|
||||
}
|
||||
@ -149,7 +149,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
string flag2 = null;
|
||||
int[] indexes2 = null;
|
||||
var props2 = GetQueryTypeProperties(type2);
|
||||
ExecuteReaderMultiple(2, connection, transaction, (dr, result) =>
|
||||
ExecuteReaderMultiple(2, connection, transaction, (fetch, result) =>
|
||||
{
|
||||
switch (result)
|
||||
{
|
||||
@ -158,9 +158,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -168,16 +168,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag1 = sbflag.ToString();
|
||||
}
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 1:
|
||||
if (indexes2 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -185,7 +185,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag2 = sbflag.ToString();
|
||||
}
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
}
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
@ -217,7 +217,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
string flag3 = null;
|
||||
int[] indexes3 = null;
|
||||
var props3 = GetQueryTypeProperties(type3);
|
||||
ExecuteReaderMultiple(3, connection, transaction, (dr, result) =>
|
||||
ExecuteReaderMultiple(3, connection, transaction, (fetch, result) =>
|
||||
{
|
||||
switch (result)
|
||||
{
|
||||
@ -226,9 +226,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -236,16 +236,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag1 = sbflag.ToString();
|
||||
}
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 1:
|
||||
if (indexes2 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -253,16 +253,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag2 = sbflag.ToString();
|
||||
}
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 2:
|
||||
if (indexes3 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -270,7 +270,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag3 = sbflag.ToString();
|
||||
}
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
}
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
@ -308,7 +308,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
string flag4 = null;
|
||||
int[] indexes4 = null;
|
||||
var props4 = GetQueryTypeProperties(type4);
|
||||
ExecuteReaderMultiple(4, connection, transaction, (dr, result) =>
|
||||
ExecuteReaderMultiple(4, connection, transaction, (fetch, result) =>
|
||||
{
|
||||
switch (result)
|
||||
{
|
||||
@ -317,9 +317,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -327,16 +327,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag1 = sbflag.ToString();
|
||||
}
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 1:
|
||||
if (indexes2 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -344,16 +344,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag2 = sbflag.ToString();
|
||||
}
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 2:
|
||||
if (indexes3 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -361,16 +361,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag3 = sbflag.ToString();
|
||||
}
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 3:
|
||||
if (indexes4 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -378,7 +378,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes4 = props4.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag4 = sbflag.ToString();
|
||||
}
|
||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value);
|
||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
}
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
@ -422,7 +422,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
string flag5 = null;
|
||||
int[] indexes5 = null;
|
||||
var props5 = GetQueryTypeProperties(type5);
|
||||
ExecuteReaderMultiple(5, connection, transaction, (dr, result) =>
|
||||
ExecuteReaderMultiple(5, connection, transaction, (fetch, result) =>
|
||||
{
|
||||
switch (result)
|
||||
{
|
||||
@ -431,9 +431,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -441,16 +441,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag1 = sbflag.ToString();
|
||||
}
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 1:
|
||||
if (indexes2 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -458,16 +458,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag2 = sbflag.ToString();
|
||||
}
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 2:
|
||||
if (indexes3 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -475,16 +475,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag3 = sbflag.ToString();
|
||||
}
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 3:
|
||||
if (indexes4 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -492,16 +492,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes4 = props4.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag4 = sbflag.ToString();
|
||||
}
|
||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value);
|
||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 4:
|
||||
if (indexes5 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -509,7 +509,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes5 = props5.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag5 = sbflag.ToString();
|
||||
}
|
||||
ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, dr, 0, _util).Value);
|
||||
ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
}
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
@ -517,13 +517,13 @@ namespace FreeSql.Internal.CommonProvider
|
||||
}
|
||||
#endregion
|
||||
|
||||
public void ExecuteReader(Action<DbDataReader> readerHander, string cmdText, object parms = null) => ExecuteReader(null, null, readerHander, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
|
||||
public void ExecuteReader(DbTransaction transaction, Action<DbDataReader> readerHander, string cmdText, object parms = null) => ExecuteReader(null, transaction, readerHander, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
|
||||
public void ExecuteReader(DbConnection connection, DbTransaction transaction, Action<DbDataReader> readerHander, string cmdText, object parms = null) => ExecuteReader(connection, transaction, readerHander, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
|
||||
public void ExecuteReader(Action<DbDataReader> readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReader(null, null, readerHander, cmdType, cmdText, cmdParms);
|
||||
public void ExecuteReader(DbTransaction transaction, Action<DbDataReader> readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReader(null, transaction, readerHander, cmdType, cmdText, cmdParms);
|
||||
public void ExecuteReader(DbConnection connection, DbTransaction transaction, Action<DbDataReader> readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReaderMultiple(1, connection, transaction, (dr, result) => readerHander(dr), cmdType, cmdText, cmdParms);
|
||||
void ExecuteReaderMultiple(int multipleResult, DbConnection connection, DbTransaction transaction, Action<DbDataReader, int> readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms)
|
||||
public void ExecuteReader(Action<FetchCallbackArgs<DbDataReader>> fetchHandler, string cmdText, object parms = null) => ExecuteReader(null, null, fetchHandler, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
|
||||
public void ExecuteReader(DbTransaction transaction, Action<FetchCallbackArgs<DbDataReader>> fetchHandler, string cmdText, object parms = null) => ExecuteReader(null, transaction, fetchHandler, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
|
||||
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)
|
||||
{
|
||||
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, readerHander, cmdType, cmdText, cmdParms);
|
||||
ExecuteReaderMultiple(multipleResult, connection, transaction, fetchHandler, cmdType, cmdText, cmdParms);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -603,6 +603,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
using (var dr = pc.cmd.ExecuteReader())
|
||||
{
|
||||
int resultIndex = 0;
|
||||
var fetch = new FetchCallbackArgs<DbDataReader> { Object = dr };
|
||||
while (true)
|
||||
{
|
||||
while (true)
|
||||
@ -610,8 +611,15 @@ namespace FreeSql.Internal.CommonProvider
|
||||
bool isread = dr.Read();
|
||||
if (isread == false) break;
|
||||
|
||||
if (readerHander != null)
|
||||
readerHander(dr, resultIndex);
|
||||
if (fetchHandler != null)
|
||||
{
|
||||
fetchHandler(fetch, resultIndex);
|
||||
if (fetch.IsBreak)
|
||||
{
|
||||
resultIndex = multipleResult;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (++resultIndex >= multipleResult || dr.NextResult() == false) break;
|
||||
}
|
||||
@ -649,10 +657,10 @@ namespace FreeSql.Internal.CommonProvider
|
||||
public object[][] ExecuteArray(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms)
|
||||
{
|
||||
List<object[]> ret = new List<object[]>();
|
||||
ExecuteReader(connection, transaction, dr =>
|
||||
ExecuteReader(connection, transaction, fetch =>
|
||||
{
|
||||
object[] values = new object[dr.FieldCount];
|
||||
dr.GetValues(values);
|
||||
object[] values = new object[fetch.Object.FieldCount];
|
||||
fetch.Object.GetValues(values);
|
||||
ret.Add(values);
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
return ret.ToArray();
|
||||
@ -666,20 +674,20 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
var ret = new DataSet();
|
||||
DataTable dt = null;
|
||||
ExecuteReaderMultiple(16, connection, transaction, (dr, result) =>
|
||||
ExecuteReaderMultiple(16, connection, transaction, (fetch, result) =>
|
||||
{
|
||||
if (ret.Tables.Count <= result)
|
||||
{
|
||||
dt = ret.Tables.Add();
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(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, dr.GetFieldType(a));
|
||||
dt.Columns.Add(name, fetch.Object.GetFieldType(a));
|
||||
}
|
||||
}
|
||||
object[] values = new object[dt.Columns.Count];
|
||||
dr.GetValues(values);
|
||||
fetch.Object.GetValues(values);
|
||||
dt.Rows.Add(values);
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
return ret;
|
||||
@ -692,17 +700,17 @@ 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, dr =>
|
||||
ExecuteReader(connection, transaction, fetch =>
|
||||
{
|
||||
if (ret.Columns.Count == 0)
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(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, dr.GetFieldType(a));
|
||||
ret.Columns.Add(name, fetch.Object.GetFieldType(a));
|
||||
}
|
||||
object[] values = new object[ret.Columns.Count];
|
||||
dr.GetValues(values);
|
||||
fetch.Object.GetValues(values);
|
||||
ret.Rows.Add(values);
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
return ret;
|
||||
|
@ -29,15 +29,15 @@ namespace FreeSql.Internal.CommonProvider
|
||||
string flag = null;
|
||||
int[] indexes = null;
|
||||
var props = GetQueryTypeProperties(type);
|
||||
await ExecuteReaderAsync(connection, transaction, dr =>
|
||||
await ExecuteReaderAsync(connection, transaction, fetch =>
|
||||
{
|
||||
if (indexes == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -45,7 +45,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes = props.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag = sbflag.ToString();
|
||||
}
|
||||
ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, dr, 0, _util).Value);
|
||||
ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, fetch.Object, 0, _util).Value);
|
||||
return Task.FromResult(false);
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
return ret;
|
||||
@ -70,7 +70,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
string flag2 = null;
|
||||
int[] indexes2 = null;
|
||||
var props2 = GetQueryTypeProperties(type2);
|
||||
await ExecuteReaderMultipleAsync(2, connection, transaction, (dr, result) =>
|
||||
await ExecuteReaderMultipleAsync(2, connection, transaction, (fetch, result) =>
|
||||
{
|
||||
switch (result)
|
||||
{
|
||||
@ -79,9 +79,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -89,16 +89,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag1 = sbflag.ToString();
|
||||
}
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 1:
|
||||
if (indexes2 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -106,7 +106,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag2 = sbflag.ToString();
|
||||
}
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
}
|
||||
return Task.FromResult(false);
|
||||
@ -139,7 +139,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
string flag3 = null;
|
||||
int[] indexes3 = null;
|
||||
var props3 = GetQueryTypeProperties(type3);
|
||||
await ExecuteReaderMultipleAsync(3, connection, transaction, (dr, result) =>
|
||||
await ExecuteReaderMultipleAsync(3, connection, transaction, (fetch, result) =>
|
||||
{
|
||||
switch (result)
|
||||
{
|
||||
@ -148,9 +148,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -158,16 +158,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag1 = sbflag.ToString();
|
||||
}
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 1:
|
||||
if (indexes2 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -175,16 +175,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag2 = sbflag.ToString();
|
||||
}
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 2:
|
||||
if (indexes3 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -192,7 +192,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag3 = sbflag.ToString();
|
||||
}
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
}
|
||||
return Task.FromResult(false);
|
||||
@ -231,7 +231,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
string flag4 = null;
|
||||
int[] indexes4 = null;
|
||||
var props4 = GetQueryTypeProperties(type4);
|
||||
await ExecuteReaderMultipleAsync(4, connection, transaction, (dr, result) =>
|
||||
await ExecuteReaderMultipleAsync(4, connection, transaction, (fetch, result) =>
|
||||
{
|
||||
switch (result)
|
||||
{
|
||||
@ -240,9 +240,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -250,16 +250,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag1 = sbflag.ToString();
|
||||
}
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 1:
|
||||
if (indexes2 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -267,16 +267,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag2 = sbflag.ToString();
|
||||
}
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 2:
|
||||
if (indexes3 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -284,16 +284,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag3 = sbflag.ToString();
|
||||
}
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 3:
|
||||
if (indexes4 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -301,7 +301,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes4 = props4.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag4 = sbflag.ToString();
|
||||
}
|
||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value);
|
||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
}
|
||||
return Task.FromResult(false);
|
||||
@ -346,7 +346,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
string flag5 = null;
|
||||
int[] indexes5 = null;
|
||||
var props5 = GetQueryTypeProperties(type5);
|
||||
await ExecuteReaderMultipleAsync(5, connection, transaction, (dr, result) =>
|
||||
await ExecuteReaderMultipleAsync(5, connection, transaction, (fetch, result) =>
|
||||
{
|
||||
switch (result)
|
||||
{
|
||||
@ -355,9 +355,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -365,16 +365,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag1 = sbflag.ToString();
|
||||
}
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 1:
|
||||
if (indexes2 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -382,16 +382,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag2 = sbflag.ToString();
|
||||
}
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 2:
|
||||
if (indexes3 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -399,16 +399,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag3 = sbflag.ToString();
|
||||
}
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
|
||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 3:
|
||||
if (indexes4 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -416,16 +416,16 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes4 = props4.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag4 = sbflag.ToString();
|
||||
}
|
||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value);
|
||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
case 4:
|
||||
if (indexes5 == null)
|
||||
{
|
||||
var sbflag = new StringBuilder().Append("adoQuery");
|
||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
var name = fetch.Object.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
@ -433,7 +433,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
indexes5 = props5.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
|
||||
flag5 = sbflag.ToString();
|
||||
}
|
||||
ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, dr, 0, _util).Value);
|
||||
ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, fetch.Object, 0, _util).Value);
|
||||
break;
|
||||
}
|
||||
return Task.FromResult(false);
|
||||
@ -442,13 +442,13 @@ namespace FreeSql.Internal.CommonProvider
|
||||
}
|
||||
#endregion
|
||||
|
||||
public Task ExecuteReaderAsync(Func<DbDataReader, Task> readerHander, string cmdText, object parms = null) => ExecuteReaderAsync(null, null, readerHander, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
|
||||
public Task ExecuteReaderAsync(DbTransaction transaction, Func<DbDataReader, Task> readerHander, string cmdText, object parms = null) => ExecuteReaderAsync(null, transaction, readerHander, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
|
||||
public Task ExecuteReaderAsync(DbConnection connection, DbTransaction transaction, Func<DbDataReader, Task> readerHander, string cmdText, object parms = null) => ExecuteReaderAsync(connection, transaction, readerHander, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
|
||||
public Task ExecuteReaderAsync(Func<DbDataReader, Task> readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReaderAsync(null, null, readerHander, cmdType, cmdText, cmdParms);
|
||||
public Task ExecuteReaderAsync(DbTransaction transaction, Func<DbDataReader, Task> readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReaderAsync(null, transaction, readerHander, cmdType, cmdText, cmdParms);
|
||||
public Task ExecuteReaderAsync(DbConnection connection, DbTransaction transaction, Func<DbDataReader, Task> readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteReaderMultipleAsync(1, connection, transaction, (dr, result) => readerHander(dr), cmdType, cmdText, cmdParms);
|
||||
async Task ExecuteReaderMultipleAsync(int multipleResult, DbConnection connection, DbTransaction transaction, Func<DbDataReader, int, Task> readerHander, CommandType cmdType, string cmdText, params DbParameter[] cmdParms)
|
||||
public Task ExecuteReaderAsync(Func<FetchCallbackArgs<DbDataReader>, Task> fetchHandler, string cmdText, object parms = null) => ExecuteReaderAsync(null, null, fetchHandler, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
|
||||
public Task ExecuteReaderAsync(DbTransaction transaction, Func<FetchCallbackArgs<DbDataReader>, Task> fetchHandler, string cmdText, object parms = null) => ExecuteReaderAsync(null, transaction, fetchHandler, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
|
||||
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)
|
||||
{
|
||||
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, readerHander, cmdType, cmdText, cmdParms);
|
||||
await ExecuteReaderMultipleAsync(multipleResult, connection, transaction, fetchHandler, cmdType, cmdText, cmdParms);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -528,6 +528,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
using (var dr = await pc.cmd.ExecuteReaderAsync())
|
||||
{
|
||||
int resultIndex = 0;
|
||||
var fetch = new FetchCallbackArgs<DbDataReader> { Object = dr };
|
||||
while (true)
|
||||
{
|
||||
while (true)
|
||||
@ -535,8 +536,15 @@ namespace FreeSql.Internal.CommonProvider
|
||||
bool isread = await dr.ReadAsync();
|
||||
if (isread == false) break;
|
||||
|
||||
if (readerHander != null)
|
||||
await readerHander(dr, resultIndex);
|
||||
if (fetchHandler != null)
|
||||
{
|
||||
await fetchHandler(fetch, resultIndex);
|
||||
if (fetch.IsBreak)
|
||||
{
|
||||
resultIndex = multipleResult;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (++resultIndex >= multipleResult || dr.NextResult() == false) break;
|
||||
}
|
||||
@ -571,10 +579,10 @@ namespace FreeSql.Internal.CommonProvider
|
||||
async public Task<object[][]> ExecuteArrayAsync(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms)
|
||||
{
|
||||
List<object[]> ret = new List<object[]>();
|
||||
await ExecuteReaderAsync(connection, transaction, async dr =>
|
||||
await ExecuteReaderAsync(connection, transaction, async fetch =>
|
||||
{
|
||||
object[] values = new object[dr.FieldCount];
|
||||
for (int a = 0; a < values.Length; a++) if (!await dr.IsDBNullAsync(a)) values[a] = await dr.GetFieldValueAsync<object>(a);
|
||||
object[] values = new object[fetch.Object.FieldCount];
|
||||
for (int a = 0; a < values.Length; a++) if (!await fetch.Object.IsDBNullAsync(a)) values[a] = await fetch.Object.GetFieldValueAsync<object>(a);
|
||||
ret.Add(values);
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
return ret.ToArray();
|
||||
@ -589,20 +597,20 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
var ret = new DataSet();
|
||||
DataTable dt = null;
|
||||
await ExecuteReaderMultipleAsync(16, connection, transaction, async (dr, result) =>
|
||||
await ExecuteReaderMultipleAsync(16, connection, transaction, async (fetch, result) =>
|
||||
{
|
||||
if (ret.Tables.Count <= result)
|
||||
{
|
||||
dt = ret.Tables.Add();
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(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, dr.GetFieldType(a));
|
||||
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 dr.IsDBNullAsync(a)) values[a] = await dr.GetFieldValueAsync<object>(a);
|
||||
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);
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
return ret;
|
||||
@ -615,17 +623,17 @@ 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 dr =>
|
||||
await ExecuteReaderAsync(connection, transaction, async fetch =>
|
||||
{
|
||||
if (ret.Columns.Count == 0)
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
for (var a = 0; a < fetch.Object.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(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, dr.GetFieldType(a));
|
||||
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 dr.IsDBNullAsync(a)) values[a] = await dr.GetFieldValueAsync<object>(a);
|
||||
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);
|
||||
}, cmdType, cmdText, cmdParms);
|
||||
return ret;
|
||||
|
@ -341,9 +341,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
Exception exception = null;
|
||||
try
|
||||
{
|
||||
_orm.Ado.ExecuteReader(_connection, _transaction, dr =>
|
||||
_orm.Ado.ExecuteReader(_connection, _transaction, fetch =>
|
||||
{
|
||||
var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, dr, 0, _commonUtils);
|
||||
var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, fetch.Object, 0, _commonUtils);
|
||||
ret.Add((TTuple)read.Value);
|
||||
}, CommandType.Text, sql, dbParms);
|
||||
}
|
||||
@ -368,14 +368,14 @@ namespace FreeSql.Internal.CommonProvider
|
||||
Exception exception = null;
|
||||
try
|
||||
{
|
||||
_orm.Ado.ExecuteReader(_connection, _transaction, dr =>
|
||||
_orm.Ado.ExecuteReader(_connection, _transaction, fetch =>
|
||||
{
|
||||
ret.Add(af.Read(_orm, dr));
|
||||
ret.Add(af.Read(_orm, fetch.Object));
|
||||
if (otherData != null)
|
||||
{
|
||||
var idx = af.FieldCount - 1;
|
||||
foreach (var other in otherData)
|
||||
other.retlist.Add(_commonExpression.ReadAnonymous(other.read, dr, ref idx, false, null));
|
||||
other.retlist.Add(_commonExpression.ReadAnonymous(other.read, fetch.Object, ref idx, false, null));
|
||||
}
|
||||
}, CommandType.Text, sql, dbParms);
|
||||
}
|
||||
@ -409,37 +409,37 @@ namespace FreeSql.Internal.CommonProvider
|
||||
return ToListAfPrivate(sql, af, otherData);
|
||||
}
|
||||
#region ToChunk
|
||||
internal void ToListAfChunkPrivate(int chunkSize, Action<List<T1>> chunkDone, string sql, GetAllFieldExpressionTreeInfo af, ReadAnonymousTypeOtherInfo[] otherData)
|
||||
internal void ToListAfChunkPrivate(int chunkSize, Action<FetchCallbackArgs<List<T1>>> chunkDone, string sql, GetAllFieldExpressionTreeInfo af, ReadAnonymousTypeOtherInfo[] otherData)
|
||||
{
|
||||
var dbParms = _params.ToArray();
|
||||
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, _tables[0].Table, Aop.CurdType.Select, sql, dbParms);
|
||||
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
|
||||
var ret = new List<T1>();
|
||||
var ret = new FetchCallbackArgs<List<T1>> { Object = new List<T1>() };
|
||||
var retCount = 0;
|
||||
Exception exception = null;
|
||||
var checkDoneTimes = 0;
|
||||
try
|
||||
{
|
||||
_orm.Ado.ExecuteReader(_connection, _transaction, dr =>
|
||||
_orm.Ado.ExecuteReader(_connection, _transaction, fetch =>
|
||||
{
|
||||
ret.Add(af.Read(_orm, dr));
|
||||
ret.Object.Add(af.Read(_orm, fetch.Object));
|
||||
retCount++;
|
||||
if (otherData != null)
|
||||
{
|
||||
var idx = af.FieldCount - 1;
|
||||
foreach (var other in otherData)
|
||||
other.retlist.Add(_commonExpression.ReadAnonymous(other.read, dr, ref idx, false, null));
|
||||
other.retlist.Add(_commonExpression.ReadAnonymous(other.read, fetch.Object, ref idx, false, null));
|
||||
}
|
||||
if (chunkSize > 0 && chunkSize == ret.Count)
|
||||
if (chunkSize > 0 && chunkSize == ret.Object.Count)
|
||||
{
|
||||
checkDoneTimes++;
|
||||
|
||||
foreach (var include in _includeToList) include?.Invoke(ret);
|
||||
_trackToList?.Invoke(ret);
|
||||
foreach (var include in _includeToList) include?.Invoke(ret.Object);
|
||||
_trackToList?.Invoke(ret.Object);
|
||||
chunkDone(ret);
|
||||
|
||||
fetch.IsBreak = ret.IsBreak;
|
||||
|
||||
ret.Clear();
|
||||
ret.Object.Clear();
|
||||
if (otherData != null)
|
||||
foreach (var other in otherData)
|
||||
other.retlist.Clear();
|
||||
@ -456,14 +456,14 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var after = new Aop.CurdAfterEventArgs(before, exception, retCount);
|
||||
_orm.Aop.CurdAfterHandler?.Invoke(this, after);
|
||||
}
|
||||
if (ret.Any() || checkDoneTimes == 0)
|
||||
if (ret.Object.Any() || checkDoneTimes == 0)
|
||||
{
|
||||
foreach (var include in _includeToList) include?.Invoke(ret);
|
||||
_trackToList?.Invoke(ret);
|
||||
foreach (var include in _includeToList) include?.Invoke(ret.Object);
|
||||
_trackToList?.Invoke(ret.Object);
|
||||
chunkDone(ret);
|
||||
}
|
||||
}
|
||||
internal void ToListChunkPrivate(int chunkSize, Action<List<T1>> chunkDone, GetAllFieldExpressionTreeInfo af, ReadAnonymousTypeOtherInfo[] otherData)
|
||||
internal void ToListChunkPrivate(int chunkSize, Action<FetchCallbackArgs<List<T1>>> chunkDone, GetAllFieldExpressionTreeInfo af, ReadAnonymousTypeOtherInfo[] otherData)
|
||||
{
|
||||
string sql = null;
|
||||
if (otherData?.Length > 0)
|
||||
@ -478,7 +478,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
|
||||
ToListAfChunkPrivate(chunkSize, chunkDone, sql, af, otherData);
|
||||
}
|
||||
public void ToChunk(int size, Action<List<T1>> done, bool includeNestedMembers = false)
|
||||
public void ToChunk(int size, Action<FetchCallbackArgs<List<T1>>> done, bool includeNestedMembers = false)
|
||||
{
|
||||
if (_selectExpression != null) throw new ArgumentException("Chunk 功能之前不可使用 Select");
|
||||
this.ToListChunkPrivate(size, done, includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null);
|
||||
@ -498,9 +498,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
Exception exception = null;
|
||||
try
|
||||
{
|
||||
_orm.Ado.ExecuteReader(_connection, _transaction, dr =>
|
||||
_orm.Ado.ExecuteReader(_connection, _transaction, fetch =>
|
||||
{
|
||||
var item = af.Read(_orm, dr);
|
||||
var item = af.Read(_orm, fetch.Object);
|
||||
ret.Add(keySelector(item), elementSelector(item));
|
||||
}, CommandType.Text, sql, dbParms);
|
||||
}
|
||||
@ -540,13 +540,13 @@ namespace FreeSql.Internal.CommonProvider
|
||||
Exception exception = null;
|
||||
try
|
||||
{
|
||||
_orm.Ado.ExecuteReader(_connection, _transaction, dr =>
|
||||
_orm.Ado.ExecuteReader(_connection, _transaction, fetch =>
|
||||
{
|
||||
var index = -1;
|
||||
ret.Add((TReturn)_commonExpression.ReadAnonymous(af.map, dr, ref index, false, null));
|
||||
ret.Add((TReturn)_commonExpression.ReadAnonymous(af.map, fetch.Object, ref index, false, null));
|
||||
if (otherData != null)
|
||||
foreach (var other in otherData)
|
||||
other.retlist.Add(_commonExpression.ReadAnonymous(other.read, dr, ref index, false, null));
|
||||
other.retlist.Add(_commonExpression.ReadAnonymous(other.read, fetch.Object, ref index, false, null));
|
||||
}, CommandType.Text, sql, dbParms);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@ -1373,9 +1373,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
Exception exception = null;
|
||||
try
|
||||
{
|
||||
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr =>
|
||||
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch =>
|
||||
{
|
||||
var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, dr, 0, _commonUtils);
|
||||
var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, fetch.Object, 0, _commonUtils);
|
||||
ret.Add((TTuple)read.Value);
|
||||
return Task.FromResult(false);
|
||||
}, CommandType.Text, sql, dbParms);
|
||||
@ -1402,14 +1402,14 @@ namespace FreeSql.Internal.CommonProvider
|
||||
Exception exception = null;
|
||||
try
|
||||
{
|
||||
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr =>
|
||||
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch =>
|
||||
{
|
||||
ret.Add(af.Read(_orm, dr));
|
||||
ret.Add(af.Read(_orm, fetch.Object));
|
||||
if (otherData != null)
|
||||
{
|
||||
var idx = af.FieldCount - 1;
|
||||
foreach (var other in otherData)
|
||||
other.retlist.Add(_commonExpression.ReadAnonymous(other.read, dr, ref idx, false, null));
|
||||
other.retlist.Add(_commonExpression.ReadAnonymous(other.read, fetch.Object, ref idx, false, null));
|
||||
}
|
||||
return Task.FromResult(false);
|
||||
}, CommandType.Text, sql, dbParms);
|
||||
@ -1459,9 +1459,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
Exception exception = null;
|
||||
try
|
||||
{
|
||||
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr =>
|
||||
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch =>
|
||||
{
|
||||
var item = af.Read(_orm, dr);
|
||||
var item = af.Read(_orm, fetch.Object);
|
||||
ret.Add(keySelector(item), elementSelector(item));
|
||||
return Task.FromResult(false);
|
||||
}, CommandType.Text, sql, dbParms);
|
||||
@ -1503,13 +1503,13 @@ namespace FreeSql.Internal.CommonProvider
|
||||
Exception exception = null;
|
||||
try
|
||||
{
|
||||
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr =>
|
||||
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch =>
|
||||
{
|
||||
var index = -1;
|
||||
ret.Add((TReturn)_commonExpression.ReadAnonymous(af.map, dr, ref index, false, null));
|
||||
ret.Add((TReturn)_commonExpression.ReadAnonymous(af.map, fetch.Object, ref index, false, null));
|
||||
if (otherData != null)
|
||||
foreach (var other in otherData)
|
||||
other.retlist.Add(_commonExpression.ReadAnonymous(other.read, dr, ref index, false, null));
|
||||
other.retlist.Add(_commonExpression.ReadAnonymous(other.read, fetch.Object, ref index, false, null));
|
||||
return Task.FromResult(false);
|
||||
}, CommandType.Text, sql, dbParms);
|
||||
}
|
||||
|
16
FreeSql/Internal/Model/FetchCallbackArgs.cs
Normal file
16
FreeSql/Internal/Model/FetchCallbackArgs.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace FreeSql.Internal.Model
|
||||
{
|
||||
public class FetchCallbackArgs<T>
|
||||
{
|
||||
public T Object { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否放弃继续读取
|
||||
/// </summary>
|
||||
public bool IsBreak { get; set; }
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user