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") + ";Password=P@ssw0rd;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、トークン エラー = . ]

何か助けはありますか?

前もって感謝します!

4

1 に答える 1

4

これが問題だと思います:

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

私はあなたが意味したと思います:

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

Photoとの間のスペースに注意してくださいON。正直に言うと、クエリを再フォーマットして、これがより明確になると思います...

于 2012-06-02T12:28:14.427 に答える