2012-03-06 4 views
1

Я продолжаю получать эту ошибку, я не знаю, почему, я все еще новичок в C#. любезно помогите мне понять это, пожалуйста. У меня есть два dropdownlist, которые будут заполнять данные на основе первого выбранного списка.Сведения об исключении: System.Data.SqlClient.SqlException: Недопустимое имя столбца 'PRC0000001'

, когда я выбираю значение на первом DropDownList, я получаю эту ошибку ..

вот мой код ..

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      //read sql server connection string from web.config file 
      string constring = ConfigurationManager.ConnectionStrings["AccreString"].ConnectionString; 
      SqlConnection conn = new SqlConnection(constring); 
      DataTable dt = new DataTable("emed_province"); 

      using (conn) 
      { 
       conn.Open(); 
       SqlCommand comm = new SqlCommand("SELECT * FROM emed_province ORDER BY PROVINCE_NAME ASC", conn); 
       SqlDataAdapter adptr = new SqlDataAdapter(comm); 
       adptr.Fill(dt); 
      } 

      ddlProvince.DataSource = dt; 
      ddlProvince.DataTextField = "PROVINCE_NAME"; 
      ddlProvince.DataValueField = "PROVINCE_CODE"; 
      ddlProvince.DataBind(); 
     } 
    } 

    protected void ddlProvince_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string constring = ConfigurationManager.ConnectionStrings["AccreString"].ConnectionString; 
     SqlConnection conn = new SqlConnection(constring); 
     DataTable dt = new DataTable("emed_province"); 

     using (conn) 
     { 
      conn.Open(); 
      SqlCommand comm = new SqlCommand("SELECT CITY_NAME FROM emed_city WHERE PROVINCE_CODE ="+ddlProvince.SelectedValue, conn); 
      SqlDataAdapter adptr = new SqlDataAdapter(comm); 
      adptr.Fill(dt); 
     } 

     ddlCity.DataSource = dt; 
     ddlCity.DataTextField = "CITY_NAME"; 
     ddlCity.DataValueField = "CITY_CODE"; 
     ddlProvince.DataBind(); 
    } 
} 
+0

Если мой ответ решил вашу проблему, вы можете пометить его, отметив пустой значок V слева от ответа. –

ответ

3

Это происходит потому, что вы прошли необработанное значение без кавычек, так база данных думала, что вы имеете в виду имя поля.

Избегайте все это месиво с помощью параметров:

using (conn) 
{ 
    conn.Open(); 
    SqlCommand comm = new SqlCommand("SELECT CITY_NAME FROM emed_city WHERE [email protected]", conn); 
    comm.Parameters.AddWithValue("@pcode", ddlProvince.SelectedValue); 
    SqlDataAdapter adptr = new SqlDataAdapter(comm); 
    adptr.Fill(dt); 
} 
+0

это сработало! но у меня есть другая проблема: во втором раскрывающемся списке нет данных, после того как я выбрал значение для первого. – user1230147

+0

Вы связываете неправильное падение. Измените 'ddlProvince.DataBind();' на 'ddlCity.DataBind();' (в 'ddlProvince_SelectedIndexChanged') –

+0

oops .. !! это моя ошибка .. извините .. вы отличная помощь .. жаль, что я не мог добавить + на вас. – user1230147

0

Этот ответ является альтернативный подход, при использовании параметров не является жизнеспособным.

SQL-интерпретатор смешивает значения с объектами базы данных.
Вы можете скрыть интерпретатор от путаницы, сделав инструкцию SQL более явной. Столбцы объемного звучания и имена таблиц с квадратными скобками [ и оберните любые значения в одинарные кавычки.

using (conn) 
    { 
     var whereValue = "'"+ddlProvince.SelectedValue+"'";//wrap in single quotes 
     conn.Open(); 
     SqlCommand comm = new SqlCommand("SELECT [CITY_NAME] FROM [emed_city] WHERE [PROVINCE_CODE] = "+whereValue; 
     SqlDataAdapter adptr = new SqlDataAdapter(comm); 
     adptr.Fill(dt); 
    } 

Квадратные скобки явно указывают SQL Intepreter, что он имеет дело с объектом базы данных. Одиночные кавычки информируют интерпретатора о значении.

Теперь интерпретатор не примет ваше значение для имени столбца.

Смежные вопросы