Синтаксическая ошибка MySQL - PullRequest
0 голосов
/ 02 апреля 2011

Я получаю ошибку, не зная, как ее исправить:

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 ]

3 голосов
/ 02 апреля 2011

Попробуйте указать, какой столбец UserId вы используете в своем запросе:

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

Также я бы порекомендовал вам использовать MySQL ADO.NET драйвер / соединитель вместо 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 голос
/ 02 апреля 2011

Вам нужно указать, какой UserId вы используете в своем запросе.

ВЫБЕРИТЕ User.UserID, FirstName, SecondName, p.PicturePath ОТ пользователя СЛЕДУЮЩИЕ ИЗОБРАЖЕНИЯ p ON p.UserID = u.UserID ГДЕ FirstName LIKE '% "+ search +"%' ORDER BY UserIDDESC

0 голосов
/ 02 апреля 2011

добавить префикс таблицы в столбец запроса userID, указав источник таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...