我正在做一個專案,我需要從 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()
uj5u.com熱心網友回復:
John 建議您可以使用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了
uj5u.com熱心網友回復:
這里有幾件事可能會絆倒新手:
- 不要嘗試重復使用相同的連接物件。它會干擾稱為連接池的功能,最終會造成瓶頸,使事情變慢,并導致您使用更多而不是更少的記憶體。
- 務必將您的資料訪問置于其自己的類或模塊中,與您的 UI 和業務邏輯分開,但僅重用此模塊中的連接字串,而不是完整連接。此類/模塊將為您要運行的每個查詢或操作提供一個單獨的方法。
- 請務必將這些短期連接放在一個
Using塊中,以確保它們被正確處理。 - 陣列在正式的計算機科學術語中具有非常特定的含義。然而,許多語言都有更通俗意義上的陣列。.Net 不是這些平臺之一。當您在 .Net 中有一個陣列時,您在完整的正式定義中有一個真正的陣列。這些表單陣列很少適合現代作業。您幾乎總是需要一個通用串列,甚至是原始資料訪問物件 (DAO),如 ADO.Net 提供的 IDataReader 或 DataTable。資料系結也是一種選擇。陣列很糟糕,好嗎?不要將它們與其他集合混為一談。
- 確保始終使用引數化查詢,并且永遠不要使用字串連接來構建 SQL 陳述句。我沒有看到你錯過了這個的證據,但它足夠重要以確保它被列出。
- 與 #5 類似(重要到不容忽視,即使它與問題無關),切勿將密碼存盤在您的資料庫中。要使用您的資料庫來支持身份驗證,請使用唯一的 nonce 值對新密碼進行加鹽,然后使用安全加密哈希(例如 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/476206.html
