2013-11-25 28 views
2

我有一個表在我的數據庫中有4列,是Specie | Price | Stock | Country修改我的查詢連接C#

我有一個名爲ddlcountry的下拉列表,該列表通過Country列填充。

然後我有一個名爲DdPetPist的下拉列表,該列表應該填入與通過上一個下拉列表選擇的國家相關聯的所有Specie

例如我選擇英國,我有一個名單狗,貓和兔子。

問題的

  1. 在我選擇了英國的​​時刻,在第二個下拉所有正金秀。
  2. 當我選擇國家下拉菜單時,它會不止一次地重複國家。

守則第一個下拉(選擇國家)

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      MySqlCommand cd2 = new MySqlCommand("SELECT * FROM Animals", cs); // need to make it so changes database 
      cs.Open(); 
      MySqlDataReader ddlCountry = cd2.ExecuteReader(); 
      ddlcountry.DataSource = ddlCountry; 
      ddlcountry.DataValueField = "Country"; 
      ddlcountry.DataTextField = "Country"; 
      ddlcountry.DataBind(); 
      cs.Close(); 
      cs.Dispose(); 
     } 
    } 

代碼來填充第二列表中選擇縣

protected void ddlcountry_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (ddlcountry.Text != string.Empty) 
     { 
      MySqlCommand cd = new MySqlCommand(string.Format("SELECT * FROM Animals", ddlcountry.Text), cs); 
      cs.Open(); 
      MySqlDataReader ddlSpecie = cd.ExecuteReader(); 
      DdPetPist.DataSource = ddlSpecie; 
      DdPetPist.DataValueField = "Specie"; 
      DdPetPist.DataTextField = "Specie"; 
      DdPetPist.DataBind(); 
      cs.Close(); 
      cs.Dispose(); 
     } 
    } 

我想我靠近只是不知道如何適當調整我的查詢。 任何幫助,非常感謝。

+1

'SELECT * FROM Animals',你填充你的國家,DDL?除此之外,不要重複使用'MySqlConnection',而要使用'using'語句。我很驚訝你沒有得到一個例外,因爲你正在處置它。如果您之後在其他方法中使用它,則會得到一個'ObjectDisposedException'。 –

+0

你的意思是說我的問題? – Beep

+0

我認爲你不應該總是從你的數據庫中一遍又一遍地獲取物種。 寧可加載一次(也在page_load中),然後根據您選擇的內容,相應地更改您的列表。 –

回答

2

我認爲您所查詢的ddlcountry_SelectedIndexChanged事件中缺少選定特定國家/地區的WHERE子句。像下面那樣改變它。我參照@Fabian指出的查詢來防止SQL注入攻擊。與其他人建議的一樣,您應該使用Using語法在連接超出範圍時自動處置該連接。

private String sql = "SELECT DISTINCT(Specie) FROM Animals WHERE Country = @SelectedCountry;"; 
MySqlCommand cd = new MySqlCommand(sql), cs); 
cd.Parameters.AddWithValue("@SelectedCountry", ddlcountry.Text); 
MySqlDataReader ddlSpecie = cd.ExecuteReader(); 
DdPetPist.DataSource = ddlSpecie; 
DdPetPist.DataValueField = "Specie"; 
DdPetPist.DataTextField = "Specie"; 
DdPetPist.DataBind(); 

另外,在你的第一個查詢中,不需要用*來選擇所有的東西。按照以下方式更新它以獲取UNIQUE國家/地區值。

MySqlCommand cd2 = new MySqlCommand("SELECT DISTINCT(Country) FROM Animals", cs); 
+2

請提供參數化解決方案以獲得+1。 :) –

+0

完美,工作順利。謝謝 – Beep

+0

hm,好吧我想我理解了更新。我會試試看。 – Beep

1

我想我已經找到了問題。

只需更換

MySqlCommand cd = new MySqlCommand(string.Format("SELECT * FROM Animals",ddlCountry.Text),cs);

MySqlCommand cd = new MySqlCommand(string.Format("SELECT Animals.Specie FROM Animals WHERE Animals.Country={0};",ddlCountry.Text),cs);

的outuput將是一個數據表只有一列(種)

+1

請提供參數化解決方案以獲得+1。 :) –

1

更改查詢國家下拉列表

"SELECT Distinct Country FROM Animals" 

和您的查詢第二個下拉到

string.Format("SELECT * FROM Animals WHERE Country = '{0}'", ddlcountry.Text) 
+0

請提供參數化解決方案以獲得+1。 :) –