2011-04-02 103 views
0

我得到一个错误不确定如何解决它:MySQL的语法错误

ERROR [HY000] [MySQL][ODBC 3.51 Driver][mysqld-5.5.9]Column 'UserID' in field list is ambiguous 

我的代码:

using System.Data.Odbc; 

public partial class Search : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    private void PopulateWallPosts(string search) 
    { 

     using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=commando;")) 
     { 
      cn.Open(); 
      using (OdbcCommand cmd = new OdbcCommand("SELECT UserID, FirstName, SecondName, p.PicturePath FROM User LEFT JOIN Pictures p ON p.UserID = u.UserID WHERE FirstName LIKE '%" + search + "%' ORDER BY UserID DESC", cn)) 
      { 
       using (OdbcDataReader reader = cmd.ExecuteReader()) 
       { 
        test1.Controls.Clear(); 

        while (reader.Read()) 
        { 

         System.Web.UI.HtmlControls.HtmlGenericControl div = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); 
         div.Attributes["class"] = "test"; 


         div.ID = String.Format("{0}", reader.GetString(0)); //userid 
         string id = Convert.ToString(div.ID); 
         //store the div id as a string 
         Image img = new Image(); 
         img.ImageUrl = String.Format("{0}", reader.GetString(3)); //p.picturepath 
         img.AlternateText = "Test image"; 

         div.Controls.Add(img); 
         div.Controls.Add(ParseControl(String.Format("&nbsp&nbsp " + "{0} {1}", reader.GetString(1), reader.GetString(2)))); // FirstName, SecondName 
         div.Attributes.Add("onclick", "confirm_delete(" + id + ");"); 
         // send the div id to javascript 
         div.Style["clear"] = "both"; 
         test1.Controls.Add(div); 

        } 
       } 
      } 
     } 
    } 
    protected void Button2_Click(object sender, EventArgs e) 
    { 


     string search = TextBox2.Text; 

     PopulateWallPosts(search); 

     } 
    } 

表结构: enter image description here

回答

3

尝试指定:

using (OdbcCommand cmd = new OdbcCommand("SELECT u.UserID, u.FirstName, u.SecondName, p.PicturePath FROM User u LEFT JOIN Pictures p ON p.UserID = u.UserID WHERE u.FirstName LIKE '%" + search + "%' ORDER BY u.UserID DESC", cn)) 

另外我想你使用推荐210而不是ODBC。最后,使用参数化查询,因为当前您的代码容易受到SQL注入的影响,并且这个字符串连接的参数为search

因此,这里是你的改进代码的外观像:

using (var cn = new MySqlConnection("Server=localhost; Database=gymwebsite2; User=root; Password=commando;")) 
using (var cmd = cn.CreateCommand()) 
{ 
    cn.Open(); 
    cmd.CommandText = "SELECT u.UserID, u.FirstName, u.SecondName, p.PicturePath FROM User u LEFT JOIN Pictures p ON p.UserID = u.UserID WHERE u.FirstName LIKE '@search' ORDER BY u.UserID DESC"; 
    cmd.Parameters.AddWithValue("@search", search); 
    using (var reader = cmd.ExecuteReader()) 
    { 
     test1.Controls.Clear(); 
     while (reader.Read()) 
     { 
      ... 
     } 
    } 
} 
1

你需要指定USERID你”在你的查询中引用。

SELECT User.UserID,姓, SecondName,p.PicturePath FROM用户 LEFT JOIN图象P ON p.UserID = u.UserID WHERE姓LIKE '% “+ 搜索+” %' ORDER BY用户名DESC

用户ID列中,您使用的是在查询其中
0

把表前缀上你的用户ID查询列,指定表源