C# 未从存储过程填充组合框

C# 未从存储过程填充组合框,c#,winforms,stored-procedures,combobox,populate,C#,Winforms,Stored Procedures,Combobox,Populate,我想在表单上填充一个组合框。我有一些存储过程,用于获取组合框的数据。我的代码如下。问题是我的组合框没有填充。当我逐步浏览代码时,它会进入“reader=sc.ExecuteReader();”行,并且不会执行Pop_ComboBox()中的任何后续行。存储过程返回“ID”和“Description”(仅限)。我做错了什么 private void frmInput_Load(object sender, EventArgs e) { //Connect to th

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

    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;

    }

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


然后将组合框数据源与datatable绑定。

显式地将命令类型设置为StoredProcedure

sc.CommandType = CommandType.StoredProcedure;

不要使用
exec
只使用StoredProc名称

,所以我想将其总结为我自己问题的一个有说服力的答案。然而,我需要给予应有的赞扬,因为如果不是因为别人的一些伟大想法,我无法回答

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

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

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

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

谢谢大家的建议。我学到了一些有价值的经验,我的组合框也被填满了

调用
ExecuteReader
时可能会出现异常。在Visual Studio中,转到
Debug->Exceptions
,检查所有内容并再次调试。或者将呼叫放入try-catch块并查看异常。顺便说一句,您尚未打开连接!!this.sqlConn.Open()@阿兹哈尔-谢谢你的关注!谢谢达里奥的建议。我现在看到我的SqlConn工作不正常。它正在工作。Dario建议将代码放在try-catch块中,这有助于解决问题。原来我和数据库没有联系。我习惯于VB,它在调试模式下发生异常时停止代码执行。现在我知道我需要在C#中调试时到处尝试catch块。谢谢大家!我很好奇:对于只读数据集,为什么DataAdapter比DataReader更好?或者你提出这个建议是因为我尝试使用datareader时无法使用它?现在我与db有了良好的连接,我的原始代码(使用SqlDataReader)工作得非常好。