Как читать данные из SQL и помещать их в массив в VB с кодом и без ящиков

Я делаю проект, в котором мне нужно читать данные из таблицы SQL (называется Table_IDs_Name). В этой таблице я должен прочитать столбец (Variable_Name) и получить каждую строку в массиве (вызывается в коде как Names_Array). Я пробую следующий код, и я получаю значения с помощью считывателя, но как я могу поместить их в массив? Это очень важно, поэтому надеюсь, что вы можете помочь мне с этим

        Public SQL_Connection As SqlConnection  
        Public SQL_Command As SqlCommand   
        Public SQL_Connection_String As String    
        Public Names_Array() As String

        SQL_Connection_String = "---------------------------"

        SQL_Connection = New SqlConnection(SQL_Connection_String)  
        SQL_Connection.Open()   

        Dim SQL_Statement_Array As String = "SELECT Variable_Names From Table_IDs_Names"
        SQL_Command = New SqlCommand(SQL_Statement_Array, SQL_Connection)

        Dim Reader As SqlDataReader

        Dim i As Integer

        Reader = SQL_Command.ExecuteReader()

        While Reader.Read()
            Console.WriteLine(Reader("Variable_Name").ToString().ToArray())
            Names_Array(i) = Reader("Variable_Name").ToString().ToArray()
            i = i + 1
            Console.WriteLine("PROBANDO {0}", Names_Array(i))
        End While

            SQL_Command.Dispose()

привет, Гусо, может быть, тебе следует пометить этот вопрос тегом vb.net.

Bagus Tesa 16.05.2022 11:44

Используйте List(Of String), чтобы добавлять элементы по ходу дела. Затем вы можете использовать это как есть или, если вам действительно нужен массив, просто вызовите для него ToArray.

John 16.05.2022 12:15

Можете ли вы объяснить мне, как реализовать список строк и куда звонить в коде? никогда не используйте эту функцию

GusoXXL 16.05.2022 12:59
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
3
44
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Джон предложил использовать List строки, который происходит от System.Collection.Generic.

Import System.Collection.Generic

.... 'rest of the code

'declare list of string to store stuff
Dim lst as List(Of String) = new List(Of String)

'iterate query result
While Reader.Read()
    'add query result to the list
    lst.Add(Reader("Variable_Name").ToString())
End While

Вы можете использовать список строк с именем lst в цикле или преобразовать его в массив с помощью lst.ToArray().

Примечание: я очень давно не писал на vb.net.

Несколько вещей, которые могут сбить с толку новичков в этом деле:

  1. НЕ пытайтесь повторно использовать один и тот же объект подключения. Это мешает функции под названием пул соединений и в конечном итоге создаст узкие места, замедлит работу и заставит вас использовать память более, а не меньше.
  2. Поместите свой доступ к данным в отдельный класс или модуль, отдельно от вашего пользовательского интерфейса и бизнес-логики, но повторно используйте только строка подключения в этом модуле, а не полное соединение. Этот класс/модуль будет иметь отдельный метод для каждого запроса или операции, которую вы хотите выполнить.
  3. Поместите эти недолговечные соединения в блок Using, чтобы убедиться, что они правильно расположены.
  4. Массивы имеют очень специфическое значение в формальных терминах информатики. Однако многие языки определяют массивы в более разговорном смысле. Это неверно для .Net. Когда у вас есть массив в .Net, у вас есть настоящий массив в полном формальном определении. Эти формальные массивы не так часто подходят для современной работы. Вместо этого вам почти всегда нужен общий список или даже необработанные объекты доступа к данным (DAO), такие как IDataReader или DataTable, предоставляемые ADO.Net. Привязка данных также является опцией. Массивы просто плохи для этого, м'кей? Не путайте их с другими коллекциями.
  5. Обязательно всегда используйте параметризованные запросы и конкатенацию строк НИКОГДА для построения операторов SQL. Я не вижу улик, которые вы пропустили, но это достаточно важно, чтобы убедиться, что оно есть в списке.
  6. Подобно № 5 (слишком важно, чтобы упускать из виду, даже если это не имеет отношения к вопросу), НИКОГДА хранит пароли в вашей базе данных. Чтобы использовать вашу базу данных для поддержки аутентификации, вместо соль введите новые пароли с уникальным одноразовым значением, а затем хэшируйте результат безопасным криптографическим хешем а-ля BCrypt. Вы можете сохранить полученный хэш. Когда кто-то пытается войти в систему, вы выполняете те же операции с паролем, а затем сравниваете хэши; НИКОГДА сравнивает пароли напрямую.

Все это в стороне, мы можем посмотреть на код:

Public Module DB

    Private ConnectionString As String = "---------------------------"

    'I'm extending this to filter by TableID, just so I can demonstrate a parameterized query
    Public Shared Iterator Function GetIDVariables(TableID As Integer) As IEnumerable(Of String)
       
        Dim SQL As String = "SELECT Variable_Names From Table_IDs_Names WHERE TableID = @TableID"
        Using cn As New SqlConnection(ConnectionString), _
              cmd As New SqlCommand(SQL, cn)

            cmd.Parameters.Add("@TableID", SqlDbType.Int).Value = Table
            cn.Open()

            Using rdr As SqlDataReader = cmd.ExecuteReader()
                While rdr.Read()
                    Yield DirectCast(rdr("Variable_Names"), String)
                End While
                rdr.Close()
            End Using
        End Using
    End Function
End Module

А затем в другом коде:

Dim data = DB.GetIDVariables(12345)
For Each variable As String in data
   Console.WriteLine($"PROBANDO {variable}")
Next

Другие вопросы по теме