2012-06-02 8 views
0

Visual Studio 2010을 사용하여 C#에서 프로그램을 작성하고 .sdf 파일에서 데이터를 검색 할 때 오류가 발생합니다. 쿼리를 구문 분석하는 동안 오류가 발생했습니다.

private void BasicSearch_button_Click(object sender, EventArgs e) 
{ 
    SqlCeConnection cn = new SqlCeConnection(@"Data Source=" + Path.Combine(Application.StartupPath, "FRAT_DB.sdf") + ";[email protected];Persist Security Info=False;Max Database Size=256"); 

    string query = @"SELECT Person.PersonID, Person.Name, PhotoTags.PhotoID, Photo.Path, Photo.Location, Person.Age, Person.P_Group, Person.Email, Photo.Date "+ 
        "FROM Person INNER JOIN PhotoTags ON Person.PersonID = PhotoTags.PersonID INNER JOIN "+ 
        "PhotoON PhotoTags.PhotoID = Photo.PhotoID "+"WHERE (Person.Name LIKE '%%')"; 

    if (txtName1.Text.Trim().ToString() == "" || txtName2.Text.Trim().ToString() == "") 
    { MessageBox.Show("Enter Both, Name1 and Name2"); return; } 
    else if (radioButtonAND.Checked) 
    { 
     query = @"select pt.PhotoID,Photo.Path,photo.Location, Photo.Date from Person p inner join PhotoTags pt on p.PersonID=pt.PersonID inner join Photo on pt.photoID=photo.photoID where Name like '%" + txtName1.Text + "%' and pt.Photoid in (select pt.PhotoID from Person p inner join PhotoTags pt on p.PersonID=pt.PersonID where Name like '%" + txtName2.Text + "%')"; 
    } 
    else 
    { 
     query = @"SELECT DISTINCT Person.PersonID, Person.Name, PhotoTags.PhotoID, Photo.Path, Photo.Location, Person.Age, Photo.Date 
FROM Person INNER JOIN PhotoTags ON Person.PersonID = PhotoTags.PersonID INNER JOIN 
PhotoON PhotoTags.PhotoID = Photo.PhotoID 
WHERE (Person.Name LIKE '%%')"; 
     query += " AND (Person.Name like '%" + txtName1.Text + "%' OR Person.Name like '%" + txtName2.Text + "%')"; 
    } 

    if (cn.State == ConnectionState.Closed) cn.Open(); 

    SqlCeCommand cm_Search = new SqlCeCommand(query, cn); 

    try 
    { 
     SqlCeDataReader rdr = cm_Search.ExecuteReader(); 

     List<PersonPhoto> personPhoto = new List<PersonPhoto>(); 
     List<PersonPhotoWithoutName> personPhotoWithoutName = new List<PersonPhotoWithoutName>(); 

     bool HasRows = rdr.Read(); 

     if (HasRows) 
     { 
      while (rdr.Read()) 
      { 
       if (radioButtonAND.Checked) 
       { 
        personPhotoWithoutName.Add(new PersonPhotoWithoutName 
          { 
           PhotoID = Convert.ToInt32(rdr["PhotoID"].ToString()), 
           Location = rdr["location"].ToString(), 
           Date = rdr["Date"] != null ? Convert.ToDateTime(rdr["Date"]) : DateTime.Now, 
           path = rdr["path"].ToString(), 
          }); 
       } 
       else 
       { 
        personPhoto.Add(new PersonPhoto 
          { 
           Name = rdr["Name"].ToString(), 
           Location = rdr["location"].ToString(), 
           Date = rdr["Date"] != null ? Convert.ToDateTime(rdr["Date"]) : DateTime.Now, 
           path = rdr["path"].ToString() 

          }); 
       } 
      } 
      rdr.Close(); 
      } 
      else 
      { MessageBox.Show("No Records Found"); selectedPictureBox.Image = null; rdr.Close(); } 

      if (personPhoto.Count > personPhotoWithoutName.Count) 
      { 
       DataGridPersons.DataSource = personPhoto; 
       DataGridPersons.Refresh(); 
      } 
      else 
      { 
       DataGridPersons.DataSource = personPhotoWithoutName; 
       DataGridPersons.Refresh(); 
      } 
     } 
     catch (Exception exp) 
     { 
       throw exp; 
     } 

     if (cn.State != ConnectionState.Closed) cn.Close(); 
} 

나는 사람이 예외 오류를 검색하려고 할 때마다

는 온다 :

쿼리를 구문 분석하는 동안 오류가 발생했습니다. [토큰 라인 번호 = 3, 토큰 라인 오프셋 = 18, 토큰 오류 = =. ]

어떤 도움이 필요합니까?

미리 감사드립니다. 난 당신이 의미 의심

... INNER JOIN 
PhotoON PhotoTags.PhotoID = Photo.PhotoID ... 

:

+1

왜 'query'에 값을 할당하고 다른 값을 재 지정함으로써 그것을 무시합니까? 실패 할 때'query'의 값은 무엇입니까? –

답변

4

나는이 문제를 의심

... INNER JOIN 
Photo ON PhotoTags.PhotoID = Photo.PhotoID ... 

PhotoON 사이의 공간. 나는 당신이 당신의 질의를 재 포맷하여 의심의 여지가 없도록 솔직하게 말할 수있을 것이라고 생각합니다 ...

관련 문제