我的数据库中有一个包含4列Specie
|的表Price
| Stock
| Country
。
我有一个名为ddlcountry
的下拉列表,该列表通过Country
列进行填充。
然后我有一个名为DdPetPist
的下拉列表,其中应填充与通过上一个下拉列表选择的国家/地区相关联的所有Specie
。
例如我选择英国,我有一个名单狗,猫和兔子。
问题的
首次下拉代码(国家/地区选择)
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();
}
}
我认为我很接近,只是不确定如何适当调整我的查询。 任何帮助深表感谢。
答案 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)