2010-09-03 4 views
0

У меня есть небольшое требование в VB.NET, которое должно заполнить массив значениями, полученными из таблицы. То есть у меня есть таблица под названием «user_roles», и у нее есть столбцы с именем «role_id» и «role_name». В событии загрузки формы я хочу выполнить процедуру и заполнить все элементы (role_id) из таблицы user_roles в массив.Заполнение массива элементами из таблицы

Может кто-нибудь, пожалуйста, помогите мне в этом требовании.

С уважением, Джордж

+0

Вопрос: Как вы получаете информацию? Вы потянете его в DataSet или вы потянете его в DataReader? – XstreamINsanity

+0

Дорогой, можно ли привести пример, как это сделать с помощью DataReader. Я не пробовал это, но у меня есть требование на то же самое. –

ответ

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 из-за соображений удобства.

Когда вы используете сильный типизированный набор данных и хотите избежать дополнительного обратного перехода после заполнения Datatable, чтобы добавить идентификаторы в список, вам необходимо расширить автоматически созданный класс DataAdapter набора данных (f.e., Называемый user_rolesTableAdapter).

Не используйте для этого класс designer.vb Dataset, потому что он будет переопределен при каждом изменении набора данных. Используйте свой класс codebehind (без 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 идентификаторов как общий список непосредственно из DataAdapter без перебора дважды (первого на заполнение datatable и second для добавления идентификаторов в список).

Конечно, вы также можете использовать этот подход Datareader в Page.Load без использования набора данных.

+0

Большое спасибо Tim и Generics - очень хороший подход. Я использую VB.NET 2005, и могу ли я использовать Generics в этом. –

+0

@George, да, вы можете использовать generics в VB.NET 2005. Они были представлены в .NET 2.0, что и предназначено для VB.NET 2005. –

+0

хорошее предложение. Я собирался предложить блок «Использование», но они не были доступны в VB до 3,5. –

Смежные вопросы