我对VB.NET有一个小要求,那就是用一个从表中检索的值来填充一个数组。那就是我有一个名为“user_roles”的表,它有一个名为“role_id”和“role_name”的列。在表单的load事件中,我想执行一个过程并将表“user_roles”中的所有项(role_id)填充到一个数组中。
任何人都可以帮我解决这个问题。
此致 乔治
答案 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方法,而无需使用数据集。