簡體   English   中英

從SQL獲取數據並進入變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM