2012-03-06 27 views
1

私はこのエラーが発生し続けます。親切に私はこれを理解してください助けてください。私は最初のドロップダウンリストの選択値に基づいてデータを入力する2つのドロップダウンリストを持っています。例外の詳細:System.Data.SqlClient.SqlException:無効な列名 'PRC0000001'

私は最初のドロップダウンリストで値を選択したとき、私はエラーを取得します。..ここ

は私のコード..です

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

それは働いた!私は別の問題がある、最初の値を選択した後、2番目のドロップダウンリストにデータが表示されない。 – 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 Intrepreterに示します。一重引用符は、それが値を扱っている通訳者に通知します。

これで、インタープリタはあなたの値を誤って列名にすることはありません。

関連する問題