[英]Getting Data From SQL and into a variable
NET並使用MS Access作為數據庫。 我正在嘗試從SQL獲取數據並將其放在變量中,然后將其打印在“消息”框中,以確認該變量保存了數據。 但是,當我運行代碼時,它會給我一條錯誤消息並突出顯示
Dim conn As New OleDbConnection and conn.Open()
"An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dll
Additional information: The ConnectionString property has not been initialized."
它不運行sql查詢。 請幫我解決這個問題。 謝謝
Imports System.Data.OleDb
Public Class ModifyForm
Dim connstring As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source= c:\Databse\Company_db.accdb"
Dim conn As New OleDbConnection
Private Sub eNumText_SelectedIndexChanged(sender As Object, e As EventArgs) Handles eNumText.SelectedIndexChanged
Dim empNum As String
Dim empFname As String
Dim empLname As String
Dim empDept As String
Dim empStat As String
Dim empYears As String
empNum = eNumText.Text
empFname = empFnameText.Text
empLname = empLnameText.Text
empDept = DeptText.Text
empStat = StatText.Text
empYears = yearstext.Text
Dim conn As New OleDbConnection(connstring)
conn.Open()
Dim DBID As String ' Or whatever type you're using for the ID field
Dim DBFirstName As String
Dim SqlQuerry As String = "SELECT * FROM tbl_empinfo WHERE EmpID like empNum"
Dim SqlCommand As New OleDbCommand
Dim SqlAdapter As New OleDbDataAdapter
Dim Table As New DataTable
With SqlCommand
.CommandText = SqlQuerry
.Connection = conn
End With
With SqlAdapter
.SelectCommand = SqlCommand
.Fill(Table)
End With
For i = 0 To Table.Rows.Count - 1
DBID = Table.Rows(i)("EmpID")
DBFirstName = Table.Rows(i)("FirstName")
MsgBox(DBID)
MsgBox(DBFirstName)
Next
conn.Close()
End Sub
End Class
您實際上需要使用連接字符串。
但是首先讓我們刪除連接的重復聲明。 從代碼的最頂部(方法外部的一個)移除Dim conn As New OleDbConnection
,由於您再次在方法內部進行聲明,因此不需要。 然后,在該方法內部,將連接初始化更新為:Dim conn As New OleDbConnection(connstring)
不僅如此,您還需要初始化命令,並向其傳遞連接字符串和查詢字符串。 適配器需要對命令的引用,您需要調用
SQLAdapter.fill(Table)
在表中獲取數據。
請查看如何使用這些對象...僅創建它們的新實例並不會隱式分配每個對象所需的所有配置信息。
注意事項之一是確保您處置實現IDisposable接口的對象以釋放非托管資源。 僅僅關閉連接是不夠的-這將導致內存泄漏,不僅是SQL對象,還有任何使用不直接管理資源的資源。 。凈
SQLCommand.dispose()
SQLAdapter.dispose()
Table.dispose()
conn.dispose()
conn.close()
最后,一旦您使用上面提供的信息並進行了一些搜索,就可以使用它,然后需要處理SQLInjection。 現在,您的查詢字符串很容易注入,而用戶可能會在查詢字符串中引用的文本框中鍵入一些惡意文本,並在未經您許可的情況下操縱數據庫。 要解決此問題,請查看參數化命令。
我正在通過手機發布信息,否則我會提供完整的代碼集; 但同時我不想為您重寫整個過程。 該答案中應該有足夠的信息,以幫助您進行一些研究。
這個MSDN頁面包含有關OleDb數據適配器的信息以及最后的簡短示例。 它還包括其他OleDb類和某些教程的鏈接和引用: http : //msdn.microsoft.com/zh-cn/library/system.data.oledb.oledbdataadapter.aspx
這個MSDN頁面包含有關SQLDataAdapter的信息,並且在最底部包括一個簡短的示例。 盡管類不同,但用法與OleDb類基本相同: http : //msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqldataadapter.aspx
盡管在vb中(在c#中不是),用法是相同的,只是語法略有不同(目前我能從手機上找到的最好)。 同樣,這是針對SQLDataAdapter類的,但用法從根本上是相同的: http : //www.codeproject.com/Tips/462730/Five-different-overloads-of-the-DataAdapter-Fill-m
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.