我想知道,使用存储过程和C#将下拉列表中的数据绑定到数据库的正确方法是什么。我有一个下拉列表ddlEmployees
和一个Employee
表,其中包含empFname
列以及存储过程selectEmployeePaycheck
,其参数为@fname
,匹配Employee
表中具有empFname
列的值。我正在使用底部的代码来绑定数据库中的数据,但不幸的是它不起作用。
SqlConnection con;
SqlCommand cmd;
SqlDataAdapter adr;
DataTable dt;
string conStr;
conStr = ConfigurationManager.ConnectionStrings["payRollConnection"].ConnectionString;
con = new SqlConnection(conStr);
con.Open();
cmd = new SqlCommand("selectEmployeePayCheck", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@fname", ddlEmployees.SelectedValue);
adr = new SqlAdapter(cmd);
dt = new DataTable();
adr.Fill(dt);
cmd.ExecuteReader();
ddlEmployees.DataTextField = "empFname";
ddlEmployees.DataValueField = "empFname";
ddlEmployees.DataSource = dt;
ddlEmployees.DataBind();
cmd.Dispose();
con.Close();
任何建议,更正,答案都被广泛接受。
答案 0 :(得分:2)
我对您的代码进行了少量修改,只需将其替换为:
SqlConnection con;
SqlCommand cmd;
SqlDataAdapter adr;
DataTable dt;
string conStr;
conStr = ConfigurationManager.ConnectionStrings["payRollConnection"].ConnectionString;
using(con = new SqlConnection(conStr)) {
using(cmd = new SqlCommand("selectEmployeePayCheck", con)) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@fname", ddlEmployees.SelectedValue);
// or cmd.Parameters.AddWithValue("@fname", ddlEmployees.SelectedText.ToString());
// according to your query at the backend
adr = new SqlAdapter(cmd);
dt = new DataTable();
adr.Fill(dt);
}
}
ddlEmployees.DataSource = dt;
ddlEmployees.DataTextField = "empFname";
ddlEmployees.DataValueField = "empFname";
ddlEmployees.DataBind();
希望它有所帮助。 :)
答案 1 :(得分:1)
尝试在字段设置之前移动数据源,此处也不需要执行读取器
adr.Fill(dt);
//cmd.ExecuteReader();
//set data source first
ddlEmployees.DataSource = dt;
ddlEmployees.DataTextField = "empFname";
ddlEmployees.DataValueField = "empFname";
ddlEmployees.DataBind();
答案 2 :(得分:1)
查看评论和原始问题我认为您的情况如下:
您有一个Employees表,其中包含员工记录和某种具有薪水详细信息的表。
您要实现的目标是当用户选择您在下拉列表中显示薪水的员工时?
如果是这种情况,我会按如下方式处理:
使用2个下拉列表,一个为您的员工,另一个为薪水记录。
使用Damiths代码中的代码填充您的员工下拉列表。确保此下拉列表已启用autopostback,并且您为此下拉列表挂钩了selectedindexchanged事件。
在选定的索引更改事件中,使用原始代码,使用ddlEmployee.selectedvalue,获取所选员工并填写薪水下拉列表。
此外,如果您在page_load事件中填充您的员工下拉列表,请确保将其打包在
中if(!isPostback)
{
}
否则下拉列表将在每次回发时重新填充,导致第一个员工的工资记录始终显示。
我希望这些答案可以帮助您了解您需要遵循的方向。