将 DbDataReader 的结果转换为 ASP.NET MVC 4 中的数据库模型,来自使用 ADO.NET 的存储过程 [重复]
Posted
技术标签:
【中文标题】将 DbDataReader 的结果转换为 ASP.NET MVC 4 中的数据库模型,来自使用 ADO.NET 的存储过程 [重复]【英文标题】:Translate result of DbDataReader to database model in ASP.NET MVC 4, coming from a stored procedure using ADO.NET [duplicate] 【发布时间】:2022-01-21 00:44:49 【问题描述】:我有一个用户定义的存储过程,它返回多个实际表作为结果集:
CREATE PROCEDURE uspDemo
(@UserID BIGINT = 0,
@IsAdmin BIT = 0,
@Title VARCHAR(120) = '')
AS
BEGIN
------Retrieve Posts------
SELECT *
FROM tblPost AS MP
INNER JOIN tblUserProfile AS UP ON UP.ID = MP.UserID
WHERE UP.ID = @UserID
AND ((@IsAdmin = 0 AND MP.IsDeleted = 0 AND MP.IsApproved = 1)
OR (@IsAdmin = 1 OR MP.IsDeleted = 0 OR MP.IsApproved = 1))
----- Retrieve Tags------
SELECT *
FROM tblTagMasters AS MT
INNER JOIN tblPostTags AS MP ON MT.TagID = MP.TagID
--------Retrieve User likes-----
SELECT *
FROM tblUserLikes AS UV
INNER JOIN tblPost AS MP ON MP.PostId = UV.PostId
END
如何在 ASP.NET MVC 中翻译?请帮帮我。
【问题讨论】:
我假设,您想使用 ado.net 检索上述 3 个结果集并将这些值存储在不同的不同模型中。请参考此链接以了解。 [链接]khalidabuhakmeh.com/…。您还必须在连接字符串中启用多个结果集。参考链接docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/… MultipleActiveResultSets 与此无关。它使您能够从两个 seperate SqlCommand 中同时激活两个 seperate SqlDataReader。这里有一个 SqlCommand 和一个 SqlDataReader。 【参考方案1】:基本上,你需要这样的东西:
// define connection string and command for your query
string connectionString = "....."; // typically load from config
string storedProcedureName = "dbo.uspDemo";
// put your disposable ADO.NET objects into proper "using ()" blocks
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(storedProcedureName, conn))
cmd.CommandType = CommandType.StoredProcedure;
// define the parameters
cmd.Parameters.Add("@UserID", SqlDbType.BigInt).Value = .....;
cmd.Parameters.Add("@IsAdmin", SqlDbType.Bit).Value = .....;
cmd.Parameters.Add("@Title", SqlDbType.VarChar, 120).Value = ".....";
// open connection
conn.Open();
// execute stored procedure to get the data reader
using (SqlDataReader reader = cmd.ExecuteReader())
// read the first set of data returned
while (reader.Read())
// read the values, construct an object from it, store the object into a list or something
// get the next set of result data
reader.NextResult();
// read the second set of data returned
while (reader.Read())
// read the values, construct an object from it, store the object into a list or something
// get the next set of result data
reader.NextResult();
// read the third set of data returned
while (reader.Read())
// read the values, construct an object from it, store the object into a list or something
conn.Close();
剩下的细节由你决定——做一些研究吧!
【讨论】:
我想你的意思是.NextResult()
@JonathanWillcock:绝对正确 - 是的,我的错 - 错字已更正,谢谢!
Dapper 可以帮助减少样板 DataReader-to-Object 代码。 dapper-tutorial.net/result-multi-mapping
如果我们不想一个一个地读取表格数据,那么我应该如何转换为表格列表。以上是关于将 DbDataReader 的结果转换为 ASP.NET MVC 4 中的数据库模型,来自使用 ADO.NET 的存储过程 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Entity Framework Core 2.0 中从 DbDataReader 转换为 Task<IEnumerable<TEntity>>?
DbDataReader、NextResult() 和填充多个表