c# - 使用 DataAdapter 对查询进行分页
问题描述
我正在尝试使用数据适配器扩展方法对我的查询进行分页。
这是我迄今为止实施的:
public static PagingInformation ExecutePagingInformation(
this IDbCommand dbCommand, int pageIndex, int pageSize,
CancellationToken cancellationToken = default)
{
string oldCommandText = dbCommand.CommandText;
dbCommand.CommandText = $"SELECT COUNT(*) FROM ({dbCommand.CommandText}) Q";
var totalCount = Convert.ToInt32(dbCommand.ExecuteScalar());
dbCommand.CommandText = oldCommandText;
return new PagingInformation(pageIndex, pageSize, 0, totalCount);
}
public static DbDataReader ExecutePagedReader(
this IDbCommand dbCommand, int pageIndex, int pageSize,
out PagingInformation pageInformation)
{
if (dbCommand.CommandType != CommandType.Text)
throw new InvalidOperationException("Only CommandType.Text is supported.");
DbDataReader reader;
if (dbCommand is OracleCommand oracleCommand)
{
pageInformation = dbCommand.ExecutePagingInformation(pageIndex, pageSize); //this is implemented by myself
reader = oracleCommand.ExecutePageReader(CommandBehavior.Default, pageIndex * pageSize, pageSize); //this is native method
}
else
{
throw new NotSupportedException();
}
return reader;
}
然后我像使用它们一样
using (var reader = cmd.ExecutePagedReader(pageIndex, pageSize, out pagingInformation))
{
while (await reader.ReadAsync(cancellationToken))
{
result.Add(reader[0].ToString());
}
}
问题是$"SELECT COUNT(*) FROM ({dbCommand.CommandText}) Q";
受SQL Injection影响的部分。我正在考虑创建另一个 SQLCommand 实例并使用参数化查询,但是,我不确定参数化查询是否可以在不转义常规 SQL 的情况下动态创建我的内部查询(我想这种方法行不通)
Devart 的 DotConnect For OracleOracleDataReader
使用ExecutePageReader
. 我对其进行了反编译,据我所知,他们正在使用 StringBuilder 生成支持分页的查询。但是,代码被混淆了,我最终无法找到解决方案。
编辑:
$"SELECT COUNT(*) FROM ({dbCommand.CommandText}) Q";
dbCommand.CommandText
由参数化查询构造(无字符串连接)
解决方案
推荐阅读
- r - 如何在 R 的团队云端硬盘中读取 Google 电子表格?
- amazon-web-services - Dynomodb 的 Amazon Api Gateway 服务代理
- java - 编写正则表达式模式以便于理解/维护?
- jquery - 对特定列进行排序不起作用 - jquery Datatables
- react-native - 打开另一个屏幕 React-navigation 3.. flatlist
- import - 导入 SQL Google Cloud SQL:HTTPError 403:权限不足
- python - 获取包含修饰函数的文件的路径
- keras - 定义具有附加权重的自定义 keras 层时如何使用 GRUCell?
- python - Tensorflow/Keras:模型的输出层期望的输入形状与它收到的不同
- sql - SQL的列级加密在哪里使用?