2010-09-03 61 views
0

我在VB.NET中有一個小的需求,那就是用從表中檢索的值填充一個數組。那就是我有一個名爲「user_roles」的表,它具有名爲「role_id」和「role_name」的列。在表單的加載事件中,我想執行一個過程並將表「user_roles」中的所有項(role_id)填充到數組中。用表中的項填充數組

任何人都可以請這個要求幫助我。

問候, 喬治

+0

問題:你如何獲取信息?你是將它拉入DataSet中還是將它拉入DataReader? – XstreamINsanity 2010-09-03 14:32:51

+0

親愛的,有可能給我一個例子,說明如何使用DataReader完成此操作。我還沒有嘗試過,但我有相同的要求。 – 2010-09-04 05:10:04

回答

2

我認爲你最好使用generic list而不是數組。如我錯了請糾正我。

如果您在代碼隱藏中填充了表,則可以遍歷所有行來添加rolw_id。

Dim allRoleIDs As New List(Of Int32) 
For Each row As DataRow In user_roles.Rows 
    allRoleIDs.Add(CInt(row("role_id)"))) 
Next 

考慮到由於性能原因,此處更好地使用Datareader。

當您使用強類型數據集並且希望在填充數據表以添加ID到列表之後避免額外的往返時,您必須擴展自動生成的數據集DataAdapter類(f.e。稱爲user_rolesTableAdapter)。

不要使用Dataset的designer.vb類,因爲它將在每個數據集更改上被覆蓋。使用它的代碼隱藏類(沒有designer.vb),並首先添加自動生成的TableAdapter中相同的名稱空間(f.e。DatasetNameTableAdapter,其中DatasetName是您的數據集的名稱)。然後添加下面的類(更換正確的命令,列索引,局部類的類名):

Namespace DatasetNameTableAdapters 

    Partial Public Class user_rolesTableAdapter 

     Public Function getListOfUserRolesID() As System.Collections.Generic.List(Of System.Int32) 
      Dim list As New System.Collections.Generic.List(Of System.Int32) 
      Dim command As System.Data.SqlClient.SqlCommand = Me.CommandCollection(0) 

      Dim previousConnectionState As System.Data.ConnectionState = command.Connection.State 
      If ((command.Connection.State And System.Data.ConnectionState.Open) _ 
         <> System.Data.ConnectionState.Open) Then 
       command.Connection.Open() 
      End If 
      Try 
       Using reader As System.Data.SqlClient.SqlDataReader = command.ExecuteReader 
        While reader.Read 
         list.Add(reader.GetInt32(0)) 
        End While 
       End Using 
      Finally 
       If (previousConnectionState = System.Data.ConnectionState.Closed) Then 
        command.Connection.Close() 
       End If 
      End Try 

      Return list 
     End Function 
    End Class 

End NameSpace 

現在,你可以得到user_roles的ID直接從DataAdapter的泛型列表不會對填充迭代兩次(第一次數據表和第二個添加到列表的ID)。

當然,您也可以在Page.Load中使用此Datareader方法而不使用數據集。

+0

非常感謝Tim和Generics是一個非常好的方法。我正在使用VB.NET 2005,我可以在那裏使用泛型。 – 2010-09-04 05:01:00

+0

@George,是的,你可以在VB.NET 2005中使用泛型。它們是在.NET 2.0中引入的,這是VB.NET 2005的目標。 – 2010-09-10 14:30:49

+0

好的建議。我正要建議一個Using塊,但這些塊在VB中不可用,直到3.5。 – 2010-09-10 14:31:35