Member 13006667 Ответов: 2

Исключение типа "system. data.sqlclient. sqlexception" произошло в system.data.dll но не была обработана в пользовательском коде дополнительная информация: неправильный синтаксис рядом с ключевым словом "by".


public DataSet BindStates(string country)
       {
           StudentContext db = new StudentContext();
           SqlConnection con = new SqlConnection(@"Data Source=DE-SHREE-02;Initial Catalog=Abhijeet;Integrated Security=True");
           con.Open();
           SqlCommand cmd = new SqlCommand("Select * from StateTable where CountryName=" + country + "order by Id asc",con);
           cmd.CommandType = CommandType.Text;

           SqlDataAdapter da = new SqlDataAdapter(cmd);
           DataSet ds = new DataSet();
          da.Fill(ds);
           con.Close();
           return ds;

       }


Что я уже пробовал:

ошибка находится в " da. Fill(ds);"
и выдавать ошибку как {"неправильный синтаксис рядом с ключевым словом 'by'."}

я хочу получить данные из одного выпадающего списка и сгенерировать данные в соответствии с выбором в другом выпадающем списке в MVC

2 Ответов

Рейтинг:
2

avinashkumar0509

строка должна быть такой:" +stringname+ " внутри строки запроса.

public DataSet BindStates(string country)
        {
            StudentContext db = new StudentContext();
            SqlConnection con = new SqlConnection(@"Data Source=DE-SHREE-02;Initial Catalog=Abhijeet;Integrated Security=True");
            con.Open();
            SqlCommand cmd = new SqlCommand("Select * from StateTable where CountryName='" + country + "' order by Id asc",con);
            cmd.CommandType = CommandType.Text;
            
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
           da.Fill(ds);
            con.Close();
            return ds;
            
        }


Рейтинг:
0

Garth J Lancaster

Ну, во - первых, исключение на самом деле говорит о том, что с вашим sql что - то не так-например, есть ли у вас столбец " Id "- что произойдет, если вы удалите предложение " order by..."?

во-вторых, это ужасный способ написания SQL-операторов - вы должны использовать параметризованные запросы, например

using (SqlCommand command = new SqlCommand(
                "Select * from StateTable where CountryName=@countryname", con))
{
    //
    // Add new SqlParameter to the command.
    //
    command.Parameters.Add(new SqlParameter("countryname", country));
    cmd.CommandType = CommandType.Text;
            
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    da.Fill(ds);
    con.Close();
    return ds;
}


Karthik_Mahalingam

5

Member 13006667

-да, у меня есть столбец, называемый "Id" в StateTable
-в то время как исполнение показывает, что ценность страны принимается правильно. но он не получает значения " Id"

Garth J Lancaster

хорошо - не уверен, что вы имеете в виду под "Но он не получает значения "Id"", но мы продолжим

- ваш SQL не имеет пробела перед вашим предложением "order by", если я правильно его вижу, - поэтому, если вы переписали лучшую форму запроса, как я предложил, и вернули обратно "order by", у вас будет

"Select * from StateTable where CountryName=@countryname ORDER BY Id ASC"

обратите внимание на пробел между @countryname и ORDER-без него и с использованием country = 'Australia', я думаю, что ваш (оригинальный SQL) сделал бы вот что

"Select * from StateTable where CountryName=@countrynameorder по коду возрастанию"

Итак, если вы используете свой оригинальный sql (bleh), поставьте пробел перед ключевым словом "order"- также взгляните на https://msdn.microsoft.com/en-us/library/ms188385.aspx#BasicSyntax для синтаксиса

Member 13006667

Благодарю вас, сэр, за помощь.
моя проблема решается после реализации ваших решений.
Спасибо!

Garth J Lancaster

отлично - вы можете понять, почему это сложнее, если вы "сцепляете" свой SQL-оператор, надеюсь, - это облегчает введение ошибок