Неверный синтаксис рядом с запятой - PullRequest
3 голосов
/ 09 января 2011

Вот фрагмент кода ASPX, когда я пытался получить несколько значений из сеанса.Я получаю сообщение об ошибке: «Неверный синтаксис рядом с запятой» (помечена строка во фрагменте):

SqlCommand cmd1 = new SqlCommand("select plugin_id from profiles_plugins where profile_id=" + Convert.ToInt32(Session["cod"]), con);
        SqlDataReader dr1 = cmd1.ExecuteReader();
        var yourlist =new List<Int32>();
        if (dr1.HasRows)
        {
            while (dr1.Read())
            {
                yourlist.Add(Convert.ToInt32(dr1[0]));
            }
        }

        //String str1 = String.Join(", ", yourlist.Select(o => o.ToString()).ToArray());
            dr1.Close();
        cmd1.Dispose();
        Array k= yourlist.ToArray();
        Int32 a =Convert.ToInt32( k.GetValue(0));
        Int32 b =Convert.ToInt32( k.GetValue(1));
        Int32 c =Convert.ToInt32( k.GetValue(2));
        Int32 d =Convert.ToInt32( k.GetValue(3));
        SqlCommand cmd2 = new SqlCommand("select id,name from plugins where id =(" + a + " or " + b + " or " + c + " or " + d +  ")" , con); /// Error here?
        SqlDataReader dr2 = cmd2.ExecuteReader(); ///Error here?
        if (dr2.HasRows)
        {
            while (dr2.Read())
            {
                ListBox2.DataSource = dr2;
                ListBox2.DataBind();
            }
        }
        dr2.Close();
        cmd2.Dispose();
con.Close();

Чего мне не хватает?

Ответы [ 3 ]

7 голосов
/ 09 января 2011

SQL-запрос неверен. Измените его на:

    SqlCommand cmd2 = new SqlCommand("select id,name from plugins   
where id in(" + a + " , " + b + " , " + c + " , " + d +  ")" , con);
2 голосов
/ 09 января 2011

Ошибка в этой строке.Попробуйте это

SqlCommand cmd2 = new SqlCommand("select id,name from plugins where id =" + a + "or id =" + b + " or id =" + c + " or id =" + d +  "" , con)
1 голос
/ 09 января 2011

В вашем случае вместо нескольких условий ИЛИ я бы предложил использовать предложение IN в вашем SQL-запросе, а вместо. .. + "" + ... Я бы использовал String.Format

SqlCommand cmd2 = new SqlCommand(String.Format("select id,name from plugins where id IN ({0}, {1}, {2}, {3}", a, b, c, d,) con);

Также, если в будущем у вас возникнет такая же или похожая ошибка, вы можете проверить свой запрос непосредственно на SQL Server. Просто откройте окно New Query и скопируйте ваш SQL-запрос, а затем запустите его В этом случае это будет что-то вроде:

select id,name from plugins where id IN (1, 2, 3, 4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...