0

我想在表单上填充一个 ComboBox。我有为我的组合框获取数据的存储过程。我的代码如下。问题是我的组合框没有被填充。当我单步执行代码时,它会到达“reader = sc.ExecuteReader();” 行并且不执行 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;

    }
4

3 回答 3

1

使用 SqlDataAdapter 并填写您的数据表。例如:

http://www.dotnetperls.com/sqldataadapter

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

于 2013-07-10T20:22:12.323 回答
0

将命令类型显式设置为 StoredProcedure

sc.CommandType = CommandType.StoredProcedure;

并且不要exec只使用 StoredProc 名称

于 2013-07-10T21:55:56.180 回答
0

因此,我想将其总结为对我自己问题的有力回答。但是,我需要在应得的地方给予赞扬,因为如果不是其他人的一些伟大想法,我无法回答。

首先,我需要一个 Try-Catch 块围绕我的代码。如果我有这个,我会得到我与数据库没有良好连接的信息。谢谢达里奥-拉莫斯!

其次,我需要一个良好的连接字符串并显式连接到数据库。明显地。谢谢你,阿兹哈尔·霍拉萨尼!

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

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

谢谢大家的建议。我学到了一些宝贵的经验,我的组合框被填满了!

于 2013-08-07T18:23:11.553 回答