2017-12-09 3 views
0

데이터베이스에서 동영상을 선택하려고하는데 값이 0 (비트 문)인지 확인하려고합니다. 사용자는 MovieID의 정수 값을 입력하고 사용자가 IsRented=1을 사용하여 MovieId을 입력하면 오류가 발생합니다.C#의 SQL 문에서 두 개의 개별 매개 변수를 검색하는 방법?

private void AddToCartButon_Click(object sender, EventArgs e) 
{ 
     int movieid; 

     bool result = Int32.TryParse(MovieIDTextBox.Text, out movieid); 

     if (result) 
     { 
      SQLiteCommand cmd = new SQLiteCommand("select * from Movies where IsRented=0", conn); 
      conn.Open(); 
      SQLiteDataReader rdr = cmd.ExecuteReader(); 

      if (rdr.Read() == true) 
      { 
       using (SQLiteCommand search = new SQLiteCommand("select * from Movies where MovieID LIKE @id", conn)) 
       { 
        search.Parameters.AddWithValue("@id", movieid); 

        var DataTable = new DataTable(); 
        var dataAdapter = new SQLiteDataAdapter(search); 
        dataAdapter.Fill(DataTable); 
        dataGridView1.DataSource = DataTable; 
       } 

       using (SQLiteCommand update = new SQLiteCommand("update Movies set [email protected] where MovieID like @id", conn)) 
       { 
        update.Parameters.AddWithValue("@id", movieid); 
       } 
      } 
     } 
} 
+0

현재 코드가 임대 아니에요 모든 영화의 목록을 가져 오기 위해 시도를하고, 적어도 하나 개의 행이 있는지 ('. Read() = true')는 제공된 ID와 일치하는 동영상을 가져 오려고합니다. 그런데 왜 첫 번째 쿼리를 수행하고 있습니까? 두 번째 쿼리에서 반환 한 행에서 IsRented 필드를 검사하는 것으로 충분하지 않습니까? 아마도 "찾을 수없는 영화"와 "발견 된 영화가 있지만 현재 대여 중"을 구별하고 싶을 것입니다. –

+0

plz 예/아니요 질문에 오류/예외 포함 –

답변

0

SELECT 쿼리는 모두 행 집합을 반환하지만이 집합은 독립적입니다.

당신은 당신이 찾고있는 행의 IsRented 값 확인해야 :

using (var cmd = new SQLiteCommand("SELECT IsRented FROM Movies WHERE MoveID LIKE @ID", conn)) 
{ 
    cmd.Parameters.AddWithValue("@ID", movieid); 
    using (var reader = cmd.ExecuteReader()) 
    { 
     if (!reader.Read()) 
     { 
      // movie not found 
     } 
     else if (reader.GetBoolean(0)) 
     { 
      // is rented 
     } 
     else 
     { 
      // not yet rented 
     } 
    } 
} 
관련 문제