如何使用c#和存储过程从数据库绑定dropdownlist

时间:2016-11-14 06:08:22

标签: c# asp.net sql-server stored-procedures

我想知道,使用存储过程和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();

任何建议,更正,答案都被广泛接受。

3 个答案:

答案 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)
{

}

否则下拉列表将在每次回发时重新填充,导致第一个员工的工资记录始终显示。

我希望这些答案可以帮助您了解您需要遵循的方向。