在我看来,对于 dapper.query 对象有一个数据读取器,对于 dapper.Execute 有一个 ExectureNonQuery 对象。如果我错了,请纠正我。
我们可以将 dapper 用于返回多个表的数据集吗?
在我看来,对于 dapper.query 对象有一个数据读取器,对于 dapper.Execute 有一个 ExectureNonQuery 对象。如果我错了,请纠正我。
我们可以将 dapper 用于返回多个表的数据集吗?
不,没有DataSet
对 . 但这并不意味着它不包含用于处理select
多个结果的查询的 API;见QueryMultiple
:
using (var multi = conn.QueryMultiple(sql, args))
{
var ids = multi.Read<int>().ToList();
var customers = multi.Read<Customer>().ToList();
dynamic someOtherRow = multi.Read().Single();
int qty = someOtherRow.Quantity, price = someOtherRow.Price;
}
请注意,此 API 仅转发(由于IDataReader
etc 的性质) - 基本上,每个Read
/ Read<T>
etc 依次映射到下一个结果网格。
我可能在这里迟到了,但这就是我IDataReader
将DataSet
. 当我们使用该方法时Dapper
返回一个。可以在此处和此处找到有关此添加的更多信息。IDataReader
ExecuteReaderAsync
这是我对此的尝试:
public async Task<DataSet> GetUserInformationOnUserId(int UserId)
{
var storedprocedure = "usp_getUserInformation";
var param = new DynamicParameters();
param.Add("@userId", UserId);
var list = await SqlMapper.ExecuteReaderAsync(_connectionFactory.GetEpaperDBConnection, storedprocedure, param, commandType: CommandType.StoredProcedure);
var dataset = ConvertDataReaderToDataSet(list);
return dataset;
}
并且ConvertDataReaderToDataSet
将在 中IDataReader
,您可以使用此方法将 IReader 转换为 Dataset:
public DataSet ConvertDataReaderToDataSet(IDataReader data)
{
DataSet ds = new DataSet();
int i = 0;
while (!data.IsClosed)
{
ds.Tables.Add("Table" + (i + 1));
ds.EnforceConstraints = false;
ds.Tables[i].Load(data);
i++;
}
return ds;
}