如何从 SQL 中读取数据并将其放入 VB 中的数组,其中包含代码且没有框

How to read data from SQL and put it into an array in VB with code and no boxes

我正在做一个项目,我需要从 SQL Table(称为 Table_IDs_Name)中读取数据。在那个 table 中,我必须读取列 (Variable_Name) 并获取数组中的每一行(在代码中称为 Names_Array)。我正在尝试以下代码并使用 reader 获取值,但如何将它们放入数组中? 它非常重要,所以希望你能帮助我

        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()

John 建议您可以使用来自 System.Collection.Generic.

List of string
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. 不要尝试 re-use 相同的连接对象。它会干扰称为 连接池 的功能,最终会造成瓶颈,使速度变慢,并导致您使用 更多 内存,而不是更少。
  2. 请将您的数据访问放入它自己的 class 或模块中,与您的 UI 和业务逻辑分开,但仅 re-use 连接字符串 在这个模块中,不是全连接。此 class/module 将为您要 运行.
  3. 的每个查询或操作提供单独的方法
  4. 请将这些 short-lived 连接放在 Using 块中以确保它们被正确处理。
  5. 数组在正式的计算机科学术语中具有非常具体的含义。但是,许多语言以更通俗的方式定义数组。对于 .Net 则不是这样。当您在 .Net 中有一个数组时,您在完整的正式定义中就有一个真正的数组。这些正式的阵列通常不适合现代工作。您几乎总是想要一个通用列表,甚至是 ADO.Net 提供的原始数据访问对象 (DAO),如 IDataReader 或 DataTable。数据绑定也是一种选择。数组对此很不利,对吗?不要将它们与其他集合混为一谈。
  6. 一定要始终使用参数化查询,并且从不 字符串连接来构建您的SQL 语句。我没有看到你在这方面遗漏的证据,但它很重要,足以确保它已列出。
  7. 与#5 类似(重要到不容忽视,即使它与问题无关),从不 将密码存储在您的数据库中。要使用您的数据库来支持身份验证,而不是 salt 具有唯一随机数值的新密码,然后使用安全的加密散列(如 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