2016-10-01 2 views
-1

Я пытаюсь отобразить данные из базы данных. Однако, несмотря на то, что в базе данных нет данных, записи не возвращаются.C# нет данных, возвращаемых из базы данных - «Неверная попытка прочитать, когда данных нет»

Если выполнить следующий запрос:

select Id, Movie_Name from [MovieTable] where Movie_Name like '10,000 BC' 

Я получаю возвращается:

enter image description here

Однако при выполнении аналогичного запроса в C# ничего, кажется, возвращается. Мой код выглядит следующим образом:

try 
{ 
    string query = "select * from [MovieTable] where Movie_Name like @MovieName"; 
    string movieName = "10,000 BC" 

    using (SqlConnection sconnection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=E:\Application\ApplicationDatabase.mdf;Integrated Security=True");) 
    using (SqlCommand command = new SqlCommand(query, sconnection)) 
    { 
     sconnection.Open(); 
     command.Parameters.AddWithValue("@MovieName", movieName); 

     using (SqlDataReader oReader = command.ExecuteReader()) 
     { 
      if (oReader != null) 
      { 
       while (oReader.Read()) 
       { 
        MessageBox.Show(oReader["Movie_Name"].ToString()); 
       } 
      } 
     } 
    } 
} 
catch (Exception e) 
{ 
    MessageBox.Show(e.ToString()); 
} 

Поле сообщения никогда не появляется. Добавление третьего окна сообщения чуть выше oReader.Read() отображает сообщение «Неверная попытка прочитать, когда данных нет». Есть что-то, чего я не вижу?

+0

это сообщение, потому что вы не можете запросить данные у datareader, прежде чем вы прочитаете данные. MessageBox - это ужасный способ отладки кода – Plutonix

+0

Это приложение для форм Windows? Если вы получаете значение года для переменной и указываете точку останова там, что она показывает? –

+0

Ничего, поскольку он не входит в цикл while – difurious

ответ

0

Проблема была с самими данными. Поле было неправильно задано как «Текст». Я изменил тип данных полей на «nvarchar (MAX)». Это также означает, что запрос не может быть изменен:

"select * from [MovieTable] where Movie_Name = @MovieName" 
0

Ваш код подходит для меня, но с небольшими адаптациями. Вы запросить значение атрибута «год», который не присутствует в таблице и в первом запросе:

oReader.GetOrdinal("Year") 

Это вызывает исключение в образце.

Отдельные кавычки не нужны, поскольку вы используете параметризованный запрос. Для отладки вызовов System.Diagnostics.Debug.WriteLine() более полезны, чем MessageBoxes

Смежные вопросы