修改我的查询连接C#

时间:2013-11-25 15:47:30

标签: c# mysql drop-down-menu concatenation

我的数据库中有一个包含4列Specie |的表Price | Stock | Country

我有一个名为ddlcountry的下拉列表,该列表通过Country列进行填充。

然后我有一个名为DdPetPist的下拉列表,其中应填充与通过上一个下拉列表选择的国家/地区相关联的所有Specie

例如我选择英国,我有一个名单狗,猫和兔子。

问题的

  1. 目前我选择了英国和所有Specie秀第二次下降。
  2. 当我选择国家/地区下拉列表时,它会多次重复该国家/地区。
  3. 首次下拉代码(国家/地区选择)

    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();
            }
        }  
    

    我认为我很接近,只是不确定如何适当调整我的查询。 任何帮助深表感谢。

3 个答案:

答案 0 :(得分:2)

我认为WHERE事件中的查询中缺少所选特定国家/地区的ddlcountry_SelectedIndexChanged条款。改变如下。我按@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);

答案 1 :(得分: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);

输出将是一个只有一列(Specie)的数据表

答案 2 :(得分:1)

将您对国家/地区下拉菜单的查询更改为

"SELECT Distinct Country FROM Animals"

以及您对第二个下拉列表的查询

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