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。