【问题标题】:ComboBoxes not getting populated from stored procedure未从存储过程填充组合框
【发布时间】:2013-07-08 22:20:15
【问题描述】:

我想在表单上填充一个 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;

    }

【问题讨论】:

  • 您可能在调用ExecuteReader 时遇到异常。在 Visual Studio 中,转到Debug->Exceptions,检查所有内容并再次调试。或者将调用放在 try-catch 块中并查看异常。
  • 顺便说一句,你还没有打开你的连接……!! this.sqlConn.Open();
  • @Azhar - 感谢您的关注!感谢 dario 的建议。我现在看到 My SqlConn 工作不正常。
  • 它现在正在工作。 Dario 将代码放在 try-catch 块中的建议帮助解决了这个问题。事实证明我没有连接到数据库。我习惯了在调试模式下发生异常时停止代码执行的 VB。现在我知道在 C# 中调试时我需要到处尝试捕获块。谢谢大家!

标签: c# winforms stored-procedures combobox populate


【解决方案1】:

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

http://www.dotnetperls.com/sqldataadapter

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

【讨论】:

  • 我很好奇:对于只读数据集,为什么 DataAdapter 比 DataReader 更好?还是您提出建议是因为我尝试使用数据读取器时无法使用它?
  • 现在我已经与数据库建立了良好的连接,我的原始代码(使用 SqlDataReader)可以完美运行。
【解决方案2】:

将命令类型显式设置为 StoredProcedure

sc.CommandType = CommandType.StoredProcedure;

不要使用exec,只需使用 StoredProc 名称

【讨论】:

    【解决方案3】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      • 2015-03-05
      相关资源
      最近更新 更多