我终于知道了如何用我的存储过程中的数据生成一个剃刀页面。但是只返回第一行或最后一行的项。
我试过使用nextresult()
,但这不起作用。我相信只有当我期望来自多个表的数据时,这才适用。我的存储过程有一些与其他表的连接,但只有一个结果集。我只需要打印该结果集中的所有值。
当我在SSRS或SSMS中执行我的存储过程时,我得到多个返回的值。下面是我的SQL代码。
SELECT Movies.MovieTitle, Movies.MovieYear, Genres.GenreName
FROM Movies
INNER JOIN GenresMovies AS gm ON gm.MovieID = Movies.MovieID
INNER JOIN Genres ON Genres.GenreID = gm.GenreID
WHERE Genres.GenreID IN (SELECT Number FROM [fn_SplitInt](@GenreID, ','))
这是我的接入层,最近从反馈中更新。
using System;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace MyMovies.Models
{
public class MovieDataAccessLayer
{
public List<Movies> GetMovieByMedia(byte? MediaID)
{
string connectionString = "Server=ServerName;Database=Movies;Trusted_Connection=True;MultipleActiveResultSets=true";
var movies = new Movies();
using (var con = new SqlConnection(connectionString))
{
using (var cmd = new SqlCommand("usp_MovieByMedia", con))
{
cmd.Parameters.Add(new SqlParameter("@MediaID", SqlDbType.TinyInt) { Value = MediaID });
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
using (var reader = cmd.ExecuteReader())
{
List<Movies> Movies = new List<Movies>();
while (reader.Read())
{
Movies movie = new Movies()
{
MovieTitle = reader["MovieTitle"].ToString(),
MovieYear = Convert.ToInt32(reader["MovieYear"])
};
Movies.Add(movie);
}
}
return Movies;
}
}
}
}
}
下面是我执行存储过程的最新更新的cshtml.cs。
namespace MyMovies.Pages.MovieDetails
{
public class DetailsModel : PageModel
{
private readonly MyMovies.Models.MyMoviesContext _context;
public DetailsModel(MyMovies.Models.MyMoviesContext context)
{
_context = context;
}
MovieDataAccessLayer objmovie = new MovieDataAccessLayer();
public List <Movies> { get; set; }
public async Task<IActionResult> OnGetAsync(byte? id)
{
if (id == null)
{
return NotFound();
}
Movies = objmovie.GetMovieByMedia(id);
if (Movies == null)
{
return NotFound();
}
return Page();
}
}
}
最后,剃刀页面显示一个带有结果的表格,最新更新!!
@page
@model MyMovies.Pages.MovieDetails.DetailsModel
@{
ViewData["Title"] = "Details";
}
<table>
<tr>
<th>Movie Title</th>
<th>Movie Year</th>
</tr>
@foreach (var item in Model.Movies)
{
<tr>
<td class="col-sm-10">
@Html.DisplayFor(Model => item.MovieTitle)
</td>
<td class="col-sm-10">
@Html.DisplayFor(Model => item.MovieYear)
</td>
</tr>
}
</table>
它返回第一个或最后一个行项。我该怎么做才能让它全部返回呢?如果我尝试做一个foreach循环,我将不得不使我的电影类为IEnumerable
。但是这样做,我不知道如何让我的存储过程工作。
发布于 2019-04-28 07:41:37
List<Movies> Movies = new List<Movies>();
while (reader.Read())
{
Movies movie = new Movies()
{
MovieTitle = reader["MovieTitle"].ToString(),
MovieYear = Convert.ToInt32(reader["MovieYear"])
}
Movies.Add(movie);
};
return Movies;
请检查以下内容:
public List<Movies> GetMovieByMedia(byte? MediaID)
{
string connectionString = "Server=ServerName;Database=Movies;Trusted_Connection=True;MultipleActiveResultSets=true";
var movies = new Movies();
using (var con = new SqlConnection(connectionString))
{
using (var cmd = new SqlCommand("usp_MovieByMedia", con))
{
cmd.Parameters.Add(new SqlParameter("@MediaID", SqlDbType.TinyInt) { Value = MediaID });
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
using (var reader = cmd.ExecuteReader())
{
List<Movies> Movies = new List<Movies>();
while (reader.Read())
{
Movies movie = new Movies()
{
MovieTitle = reader["MovieTitle"].ToString(),
MovieYear = Convert.ToInt32(reader["MovieYear"])
};
Movies.Add(movie);
}
}
return Movies;
}
新代码
public List<Movies> Movies { get; set; }
Movies = objmovie.GetMovieByMedia(id);
剃刀页面的标记:
@using Movies
<table>
@foreach(var item in model.Movies)
{
<tr>
<th class="col-sm-10">
@Html.DisplayNameFor(model => item.MovieTitle)
</th>
<th class="col-sm-10">
@Html.DisplayNameFor(model => item.MovieYear)
</th>
</tr>
}
</table>
我希望它能起作用。我不能检查这个
https://stackoverflow.com/questions/55885681
复制相似问题