2

我有一张桌子叫Product. 该表的其中一列称为Naam。这是产品的名称。当您按下按钮时,所有产品名称都必须添加到组合框中。

因此,如果我有 2 种产品:可乐和芬达。

该程序必须只显示Naam组合框中的列。不是其他列。

我的按钮已经有了这个,但它不起作用。

db.AlleProducten("Select Naam from Product;", Product);
cb_product.Items.Add(Product.Naam);

这是运行查询的方法:

public void AlleProducten(string commandText, product Product)
{
    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand(commandText, conn))
    {
        conn.Open();

        using (var rdr = cmd.ExecuteReader())
        {
             if (rdr.HasRows)
             {
                 rdr.Read();
                 Product.Naam = rdr.GetString(1);
                 conn.Close();
             }
        }
    }
}

错误:

System.Data.dll 中出现“System.IndexOutOfRangeException”类型的未处理异常

附加信息: De index ligt buiten de matrixgrenzen。

附加信息为荷兰语。翻译成英文:

索引位于数组边界之外。

4

2 回答 2

3

代码中的第一个问题是当您尝试检索 SqlDataReader 的索引 1 处的值时。您的查询只有一列,并且在 NET 数组中从索引零开始,因此您需要使用此行检索 Naam 值

Product.Naam = rdr.GetString(0);

但是,如果您有多个记录来提取 Naam 值,那么您需要使用 SqlDataReader 进行循环,直到它从 Read 方法返回 false 并将检索到的 Naam 值存储在某种集合结构中。
我建议使用一个List<string>

public List<string> AlleProducten(string commandText)
{
    List<string> names = new List<string>();
    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand(commandText, conn))
    {
        conn.Open();
        using (var rdr = cmd.ExecuteReader())
        {
            while(rdr.Read())
                names.Add(rdr.GetString(0));
        }
        conn.Close();
   }
   return names;

}

上面的代码循环遍历 SqlDataReader 的返回结果,并将每个 Naam 添加到字符串列表中,最后将列表返回给调用者。
这样就可以将AlleProducten方法的返回值赋值给combobox的DataSource

List<string>result = db.AlleProducten("Select Naam from Product;");
cb_product.DataSource = result;
于 2017-01-07T22:59:15.723 回答
1

1 - 您超出范围,因为您正在使用rdr.GetString(1)而不是rdr.GetString(0)

2 - 您的代码中没有任何 ComboBox。

using (var rdr = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        Product.Naam = rdr.GetString(0);
        YourComboBox.Items.Add(Product.Naam); 
    }
}

查看SqlCommand.ExecuteReader文档。

于 2017-01-07T22:56:45.610 回答