2016-10-01 6 views
-1

데이터베이스에서 데이터를 표시하려고합니다. 그러나 데이터가 데이터베이스에 존재하더라도 레코드는 리턴되지 않습니다. 내가 반환받을C# 데이터베이스에서 데이터가 반환되지 않았습니다. - "데이터가 없을 때 읽지 못했습니다."

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

: 다음 쿼리 실행하면

은 C#을 아무것도에서 비슷한 쿼리를 실행 그러나

enter image description here

을 반환하는 것으로 보인다. 내 코드는 다음과 같습니다 :

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

데이터가 읽히기 전에 데이터 아 래어에서 데이터를 요청할 수 없다는 메시지가 표시됩니다. 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보다 유용합니다.

관련 문제