2015-04-27 2 views
1

Когда я выполнения этого, я получаю следующее сообщение об ошибке:Неверная попытка чтения, когда данные не присутствует в моем MVC контроллер

"Invalid attempt to read when no data is present"

У меня есть данные в базе данных, но все же он показывает, как это. Помоги мне.

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);  
     } 
    } 
+0

Вы уверены, что у вашего читателя есть данные? Вы отлаживали свой код и видели его? –

+0

Да после отладки он показывает ошибку на этой строке newItem.Title = dr ["Title"]. ToString(); – user2273356

+0

Если вы собираетесь вернуться в первой итерации 'while', тогда нет причины для' while'. Просто сделайте 'dr.Read()'. – Crowcoder

ответ

3

Я думаю, вам нужно использовать {} с 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, а также распоряжаться им автоматически.

2

Вам не хватает прилагаемых кронштейнов для цикла while. Ваш действующий код только зацикливает единственную строку newItem = new TicketBooking();, и когда читатель заканчивает чтение, вы пытаетесь использовать его снова, указав 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); 
Смежные вопросы