2011-04-02 3 views
0

je reçois une erreur ne savez pas comment le corriger:mysql erreur de syntaxe

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

Mon code:

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); 

     } 
    } 

Tableau Structure: enter image description here

Répondre

3

essayez de spécifier quelle colonne UserId vous utilisez dans votre requête:

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)) 

Je voudrais également vous recommandons d'utiliser les MySQL ADO.NET driver/connector au lieu d'ODBC. Et finalement utiliser des requêtes paramétrées car actuellement votre code est vulnérable à l'injection SQL avec cette concaténation de chaîne du paramètre search.

Alors voici comment votre code améliorée pourrait ressembler à:

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

Vous devez spécifier que vous userId » re se référant à dans votre requête.

SELECT User.UserID, prenom SecondName, p.PicturePath de l'utilisateur LEFT JOIN photos p = ON p.UserID u.UserID OÙ FirstName LIKE '% "+ recherche +" %' ORDER BY UserID

CEEPC

0

mettre un préfixe de table sur votre colonne de requête ID utilisateur, en spécifiant la source de table