2013-07-10 122 views
0

我想填充窗体上的组合框。我有存储过程来获取我的ComboBoxes的数据。我的代码如下。问题是我的组合框没有被填充。当我遍历代码时,它会到达“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; 

    } 
+0

您可能会在调用ExecuteReader时发生异常。在Visual Studio中,进入'Debug-> Exceptions',检查一切并再次调试。或者将调用放入try-catch块并查看异常。 –

+0

你还没有打开你的连接...... !! this.sqlConn.Open(); –

+0

@Azhar - 感谢您的支持!并感谢达里奥的建议。我现在看到我的SqlConn工作不正常。 – johncroc

回答

0

,所以我想这个总结成一个令人信服的答案我自己的问题。但是,我需要把它应该归功于哪里,因为如果不是来自其他人的伟大想法,我不能回答。

首先,我需要一个围绕我的代码的Try-Catch块。如果我有这样的话,我会得到我没有很好连接到数据库的信息。谢谢Dario-Ramos!

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

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

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

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

1

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

http://www.dotnetperls.com/sqldataadapter

然后结合你的组合框与数据表的数据源。

+0

我很好奇:为什么DataAdapter比只读数据集的DataReader更好?或者你是否在提出建议,因为我正尝试使用它,因此无法使用数据读取器? – johncroc

+0

现在我有了一个很好的连接到数据库,我原来的代码(使用SqlDataReader)完美的作品。 – johncroc

0

精确设置命令类型为StoredProcedure

sc.CommandType = CommandType.StoredProcedure; 

和不使用exec只使用StoredProc名