2012-02-16 151 views
0

我宣佈我的數組:查找價值二維數組的VB.NET

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" 
+1

爲什麼不使用數據集?將其複製到數組中是一個非常糟糕的主意。 – 2012-02-16 15:15:50

+0

除了@ JoelCoehoorn的觀點,數據庫被設計成這樣做,編程語言[通常]不是。獲取數據庫來完成您所需要的工作 - 它將更高效,利用索引和其他優化,並節省您將大量不相關的數據加載到內存中。有沒有一個有效的理由在代碼中做到這一點? – Basic 2012-02-16 15:21:27

回答

1

這是一個根本錯誤的做法 - 對多種原因

  • 您正在將所有數據點視爲字符串
  • 您沒有充分利用數據庫優化li柯指數
  • 你將數據加載到內存中,你永遠不會使用(至少詮釋他的例子)

最好的方式做到這一點是使用LINQ到實體:

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到實體幾乎是相同的LINQ到SQL但最近的和更好的支持 - 使用單位,直到你知道其中的差別)

取名類似MyDBContext

出現提示時,選擇「生成數據庫」,並在你的數據庫指向它。

值得注意的是,設計師利用數據庫中的信息,如Foreign Key Constraints - 因此,數據庫設計得越好,其創建的模型就越好。

然後,您在代碼中引用它,如我的第一個示例中所示。

+0

正是你說什麼就是什麼,我需要的,但在那裏說MyDBcontext你的意思,我宣佈變量,對不起,我的無知 – 2012-02-16 15:40:24

+0

,因爲他們佔據查找代碼並獲得相同的陣列 – 2012-02-16 15:41:21

+0

的平均折扣@JohnNuñez有一個看看我的編輯 - 更清晰? – Basic 2012-02-16 16:02:35

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#,但我認爲這是沒有什麼不同)