C# 当我的MVC控制器中没有数据时,读取尝试无效

C# 当我的MVC控制器中没有数据时,读取尝试无效,c#,sql,asp.net-mvc,C#,Sql,Asp.net Mvc,当我执行此操作时,我得到以下错误: “当不存在数据时,尝试读取无效” 我在数据库中有数据,但仍然是这样显示的。帮帮我 public ActionResult Index() { SqlConnection con = new SqlConnection(connec); con.Open(); SqlCommand cmd = new SqlCommand("select Title,DateReleased,TheaterName,Na

当我执行此操作时,我得到以下错误:

“当不存在数据时,尝试读取无效”

我在数据库中有数据,但仍然是这样显示的。帮帮我

 public ActionResult Index()
    {
        SqlConnection con = new SqlConnection(connec);
        con.Open();
        SqlCommand cmd = new SqlCommand("select Title,DateReleased,TheaterName,Name,PhoneNo,Price,userName from vwTicketBooking ", con);
        using (SqlDataReader dr = cmd.ExecuteReader())
        {
            List<TicketBooking> results = new List<TicketBooking>();
            while (dr.Read())
                 newItem = new TicketBooking();
                newItem.Title = dr["Title"].ToString();
                newItem.DateReleased = Convert.ToDateTime(dr["DateReleased"]);
                newItem.TheaterName = dr["TheaterName"].ToString();
                newItem.Name = dr["Name"].ToString();
                newItem.PhoneNo = dr["PhoneNo"].ToString();
                newItem.Price = Convert.ToInt32(dr["Price"]);
                newItem.userName = dr["userName"].ToString();
                results.Add(newItem);
                return View(results);      
        }
    }
public ActionResult Index()
{
SqlConnection con=新的SqlConnection(connec);
con.Open();
SqlCommand cmd=newsqlcommand(“从vwTicketBooking中选择标题、发布日期、名称、电话号码、价格、用户名”,con);
使用(SqlDataReader dr=cmd.ExecuteReader())
{
列表结果=新列表();
while(dr.Read())
newItem=newticketbooking();
newItem.Title=dr[“Title”].ToString();
newItem.DateReleased=Convert.ToDateTime(dr[“DateReleased”]);
newItem.TheaterName=dr[“TheaterName”].ToString();
newItem.Name=dr[“Name”].ToString();
newItem.PhoneNo=dr[“PhoneNo”].ToString();
newItem.Price=Convert.ToInt32(dr[“Price”]);
newItem.userName=dr[“userName”].ToString();
结果。添加(新项);
返回视图(结果);
}
}

您缺少while循环的括号。您的代码实际上只是循环一行
newItem=newticketbooking()
当读者读完时,您试图再次使用它,方法是说
newItem.Title=dr[“Title”].ToString()这是给你的例外,因为没有任何阅读进一步

while (dr.Read())
{
     newItem = new TicketBooking();
     newItem.Title = dr["Title"].ToString();
     newItem.DateReleased = Convert.ToDateTime(dr["DateReleased"]);
     newItem.TheaterName = dr["TheaterName"].ToString();
     newItem.Name = dr["Name"].ToString();
     newItem.PhoneNo = dr["PhoneNo"].ToString();
     newItem.Price = Convert.ToInt32(dr["Price"]);
     newItem.userName = dr["userName"].ToString();
     results.Add(newItem);
}
return View(results);  

您缺少while循环的括号。您的代码实际上只是循环一行
newItem=newticketbooking()
当读者读完时,您试图再次使用它,方法是说
newItem.Title=dr[“Title”].ToString()这是给你的例外,因为没有任何阅读进一步

while (dr.Read())
{
     newItem = new TicketBooking();
     newItem.Title = dr["Title"].ToString();
     newItem.DateReleased = Convert.ToDateTime(dr["DateReleased"]);
     newItem.TheaterName = dr["TheaterName"].ToString();
     newItem.Name = dr["Name"].ToString();
     newItem.PhoneNo = dr["PhoneNo"].ToString();
     newItem.Price = Convert.ToInt32(dr["Price"]);
     newItem.userName = dr["userName"].ToString();
     results.Add(newItem);
}
return View(results);  

我认为您需要在
while
语句中使用
{}
,因为您的代码的工作方式如下

while (dr.Read())
{
    newItem = new TicketBooking();
}
    newItem.Title = dr["Title"].ToString();
    newItem.DateReleased = Convert.ToDateTime(dr["DateReleased"]);
    newItem.TheaterName = dr["TheaterName"].ToString();
    ...
在最后一次迭代之后,您的阅读器将位于最后一行之后,并且没有数据可以读取。像这样使用它

while (dr.Read())
{
    newItem = new TicketBooking();
    newItem.Title = dr["Title"].ToString();
    newItem.DateReleased = Convert.ToDateTime(dr["DateReleased"]);
    newItem.TheaterName = dr["TheaterName"].ToString();
    ...
    ...
}

还可以将
using
语句与
SqlConnection
SqlCommand
一起使用,以便自动处理它们。

我认为您需要将
{}
while
语句一起使用,因为您的代码的工作方式如下

while (dr.Read())
{
    newItem = new TicketBooking();
}
    newItem.Title = dr["Title"].ToString();
    newItem.DateReleased = Convert.ToDateTime(dr["DateReleased"]);
    newItem.TheaterName = dr["TheaterName"].ToString();
    ...
在最后一次迭代之后,您的阅读器将位于最后一行之后,并且没有数据可以读取。像这样使用它

while (dr.Read())
{
    newItem = new TicketBooking();
    newItem.Title = dr["Title"].ToString();
    newItem.DateReleased = Convert.ToDateTime(dr["DateReleased"]);
    newItem.TheaterName = dr["TheaterName"].ToString();
    ...
    ...
}

还可以将
using
语句与
SqlConnection
SqlCommand
一起使用,并自动处理它们。

您确定您的阅读器有数据吗?您调试了代码并看到了吗?是的,调试后,它在这一行newItem.Title=dr[“Title”].ToString()显示错误;如果要在
while
的第一次迭代中返回,则没有理由使用
while
。只要做
dr.Read()
。当然你会得到一个例外
newItem=newticketbooking()是在
while
循环中执行的唯一内容<代码>dr[“Title”]“
一旦没有数据剩余,就会在循环外部调用,并且
dr.Read()
返回false。你确定你的阅读器有数据吗?你调试了代码并看到了吗?是的,调试后,它会在此行newItem显示错误。Title=dr[“Title”]。ToString();如果要在
while
的第一次迭代中返回,则没有理由
while
。只需执行
dr.Read()
。当然,您会遇到一个异常。
newItem=new TicketBooking();
while
循环中唯一执行的操作。
dr[“Title”]一旦没有剩余数据,
将在循环外部调用,并且
dr.Read()
返回false。