-2

我正在尝试在 MVC 中使用以下代码,这是我到目前为止所做的:

public class MoviesModel
{
    public int Id { get; set; }
    public string MovieName { get; set; }
    public string Actor { get; set; }
    public int Year { get; set; }
}

控制器

public MoviesModel Index()
    {
        MoviesModel myModel;
        string connectionString =
            "";
        SqlConnection con = new SqlConnection(connectionString);
        SqlCommand com = con.CreateCommand();

        com.CommandText = "SELECT [ID] ,[MovieName] ,[Actor] ,[Year] FROM [dbo].[Movies]";
        con.Open();
        using (SqlDataReader reader = com.ExecuteReader())
        {
            while (reader.Read())
            {
                myModel = new MoviesModel
                {
                    myModel.Id = Convert.ToInt32(reader[0]),
                    myModel.MovieName = reader[1].ToString(),
                    myModel.Actor = reader[2].ToString(),
                    myModel.Year = Convert.ToInt32(reader[3])
                };
            }
        }

         con.Close();
        return myModel;
    }

但我得到以下错误

cannot initialize class with a collection because it does not implement System.Collection.IEnumerable
4

1 回答 1

1

你得到的编译错误带有一个文件名和一个行号,我保证这些东西没有指向你引用的任何代码。

实际上,我收回了这一点。我认为这可能是您的编译错误的根源(告诉我们编译器抱怨的那一行会有所帮助)。

myModel = new MoviesModel
{
    myModel.Id = Convert.ToInt32(reader[0]),
    myModel.MovieName = reader[1].ToString(),
    myModel.Actor = reader[2].ToString(),
    myModel.Year = Convert.ToInt32(reader[3])
};

这不是正确的语法。大括号内是为了初始化而运行的代码myModel——你不能myModel在括号内引用,因为直到括号内的代码完成执行后它才存在。幸运的是,您不需要这样做,因为这是设置这些属性的语法:

myModel = new MoviesModel
{
    Id = Convert.ToInt32(reader[0]),
    MovieName = reader[1].ToString(),
    Actor = reader[2].ToString(),
    Year = Convert.ToInt32(reader[3])
};

更广泛地说,我会冒昧地猜测您真正想要做的是返回一组 MoviesModel 对象,而不是返回恰好是结果集中最后一部电影的单个 MoviesModel 对象。执行此操作的代码如下所示:

public ActionResult Index()
{
    var models = new List<MoviesModel>();
    string connectionString = "";
    using (var con = new SqlConnection(connectionString))
    using (var com = con.CreateCommand())
    {
        com.CommandText = "SELECT [ID] ,[MovieName] ,[Actor] ,[Year] FROM [dbo].[Movies]";
        con.Open();
        using (var reader = com.ExecuteReader())
        {
            while (reader.Read())
            {
                var myModel = new MoviesModel
                {
                    Id = reader.GetInt32(0),
                    MovieName = reader.GetString(1),
                    Actor = reader.GetString(2),
                    Year = reader.GetInt32(3)
                };

                models.Add(myModel);
            }
        }
    }

    return View(models);
}

顺便说一句Convert.ToInt32,在数据库和阅读器中获取已经是整数的东西是一种非常低效的方法。该GetInt32方法将执行得更好。

于 2013-04-04T19:55:57.027 回答