我宣布了我的数组:
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"
答案 0 :(得分:1)
这是一种根本错误的方法 - 出于多种原因
最好的方法是使用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#,但我认为没有区别)