在VB.NET上查找二维数组中的值

时间:2012-02-16 14:40:48

标签: vb.net arrays find

我宣布了我的数组:

Dim invoice_discountitems(100, 100) As String

将值设置为数组:

For i As Int16 = 0 To data_set.Tables("discount_items").Rows.Count - 1
    invoice_discountitems(i, 1) = data_set.Tables("discount_items").Rows(0).Item("item_code")
    invoice_discountitems(i, 2) = data_set.Tables("discount_items").Rows(0).Item("discountitem_average")
Next

现在我尝试找到一个值:

Dim res As String
res = Array.IndexOf(invoice_discountitems, "FO1506")
MsgBox(res)

但是,我收到了这个错误:(

"Only single dimension arrays are supported here"

2 个答案:

答案 0 :(得分:1)

这是一种根本错误的方法 - 出于多种原因

  • 您将所有数据点视为字符串
  • 您没有利用像index这样的数据库优化
  • 您正在将数据加载到您永远不会使用的内存中(至少在他的示例中)

最好的方法是使用Linq-To-Entities:

Dim Record = MyDBContext.Discount_Items.Where(function(x) x.ItemCode = "FO1506").Single
Console.WriteLine(Record.discountitem_average);

如果您坚持使用当前的数据访问层,则需要修改正在执行的SQL以仅返回您感兴趣的信息。如果没有更多信息,我无法提供合适的示例代码,但您需要SQL最终看起来像这样...

SELECT  itemcode,
        discountitem_average,
        [Other fields],
FROM    MyDatabase.M

编辑:要澄清,有许多方法可以访问数据库中的数据。我更喜欢的是LINQ-To-Entities(浏览this tutorial)。

简而言之,您将新项目添加到项目中并将其指向您的数据库。这将成为您的“数据库上下文” - 它代表数据库,这就是您运行查询的方式。

项目 - >添加 - >新项目......

选择ADO.Net Entity Data Model(Linq-To-Entities几乎与Linq-To-Sql相同,但更新且更好支持 - 使用实体,直到您知道其中的差异)

称之为MyDBContext

出现提示时,选择“从数据库生成”并将其指向您的数据库。

值得注意的是,设计人员利用数据库中的信息,如Foreign Key Constraints - 所以数据库的设计越好,它所创建的模型就越好。

然后,你在代码中引用它,如我的第一个例子所示。

答案 1 :(得分:0)

首先,IndexOf将int作为索引返回!

获取字符串的索引 尝试:

Dim i As int
Dim j As int
i = Array.IndexOf(invoice_discountitems.OfType(Of String)().ToArray(), "FO1506")
j = i MOD 100
i= i/100
MsgBox(i+" "+j)

(我使用c#,但我认为没有区别)