ComboBox没有从存储过程填充

时间:2013-07-10 20:04:43

标签: c# winforms stored-procedures combobox populate

我想在表单上填充ComboBox。我有存储过程来获取我的ComboBoxes的数据。我的代码如下。问题是我的组合框没有填充。当我单步执行代码时,它会进入“reader = sc.ExecuteReader();” line并且不执行Pop_ComboBox()中的任何后续行。存储过程返回“ID”和“描述”(仅)。我做错了什么?

    private void frmInput_Load(object sender, EventArgs e)
    {
        //Connect to the db
        this.sqlConn = new SqlConnection("Server=\"our_server";Database=\"Astra\";Trusted_Connection=yes;");

        //Populate the Equipment Type Listbox
        Pop_ComboBox("exec uspASTRA_GetEquipTypeList;", cboEquipType);


    }

    private void Pop_ComboBox(string sQuery, ComboBox NameOfcbo)
    {
        SqlCommand sc = new SqlCommand(sQuery, this.sqlConn);
        SqlDataReader reader;

        reader = sc.ExecuteReader();
        DataTable dt = new DataTable();

        dt.Columns.Add("ID", typeof(int));
        dt.Columns.Add("Description", typeof(string));
        dt.Load(reader);

        NameOfcbo.ValueMember = "ID";
        NameOfcbo.DisplayMember = "Description";
        NameOfcbo.DataSource = dt;

    }

3 个答案:

答案 0 :(得分:1)

使用SqlDataAdapter并填充数据表。 e.g:

http://www.dotnetperls.com/sqldataadapter

然后将您的组合框数据源与数据表绑定。

答案 1 :(得分:0)

将命令类型显式设置为存储过程

sc.CommandType = CommandType.StoredProcedure;

并且不要使用exec只使用存储过程名称

答案 2 :(得分:0)

所以我想把这一点归结为对我自己的问题的切实回答。但是,我需要在应有的地方给予肯定,因为如果没有其他人的好想法,我无法回答。

首先,我需要一个围绕我的代码的Try-Catch块。如果我有这个,我会得到我与db没有良好连接的信息。谢谢Dario-Ramos!

其次,我需要一个良好的连接字符串并显式连接到db。明显。谢谢,Azhar Khorasany!

最后,正如Eslam Gamal所建议的,我需要将命令类型设置为“存储过程”,并执行如下:

sc.CommandType = CommandType.StoredProcedure;
SqlDataReader dr = sc.ExecuteReader();

谢谢大家的建议。我学到了一些有价值的课程,我的组合框已经填充了!