使用表中的项填充数组

时间:2010-09-03 14:24:50

标签: vb.net

我对VB.NET有一个小要求,那就是用一个从表中检索的值来填充一个数组。那就是我有一个名为“user_roles”的表,它有一个名为“role_id”和“role_name”的列。在表单的load事件中,我想执行一个过程并将表“user_roles”中的所有项(role_id)填充到一个数组中。

任何人都可以帮我解决这个问题。

此致 乔治

1 个答案:

答案 0 :(得分: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类(fe称为user_rolesTableAdapter)。

不要使用Dataset的designer.vb类,因为它会在每次数据集更改时被覆盖。使用其代码隐藏类(不带 designer.vb )并首先从自动生成的TableAdapter添加相同的命名空间(例如, 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

现在,您可以直接从Dataadapter获取user_roles ID作为通用List,而无需迭代两次(首先填充数据表,然后再将addind,ID添加到List)。

当然,您也可以在Page.Load中使用此Datareader方法,而无需使用数据集。