4

我试图打开一个本地存储的文件(SQLite)只是为了从特定表中提取一些行。我遇到的问题是,我不断收到无法建立连接的错误(提供程序:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例),这非常有意义,因为这不是 sql 服务器只是存储在本地数据库文件中的信息。那么我是以错误的方式解决这个问题,还是这是处理 .db 或类似文件的唯一方法,而我忽略了一些东西?

    Dim connection As String = "Data Source=" & Form1.connstring & "; Integrated Security=true"
    Dim SQLConn As New SqlConnection
    Dim SQLcmd As New SqlCommand
    Dim SQLdr As SqlDataReader

    SQLConn.ConnectionString = connection
    SQLConn.Open()

    SQLcmd.Connection = SQLConn
    SQLcmd.CommandText = SQLstr
    SQLdr = SQLcmd.ExecuteReader()
    While SQLdr.Read()
        MessageBox.Show(SQLdr.ToString)
        Form1.ListBox1.Text = SQLdr.ToString
    End While

    SQLdr.Close()
    SQLConn.Close()

Form1.connstring 是完整的文件路径。我在“Data Source=”行上尝试了几种不同类型的语法来尝试将其作为本地文件引用,但到目前为止我迷路了。

这是一个工具,它必须扫描不同的数据库文件 - 所有本地存储 - 以获取农场信息

编辑

解决方案:

Imports System.Data.SQLite 'Interop available on NuGet

Public Class _SQLite

Public Shared Sub SQLInq()
    'Value to search as SQL Query - return first match
    Dim SQLstr As String = "Select * FROM FsFileVersion WHERE FileDescription_LTH = 'Entry' LIMIT 1;"

    'Define file to open - .path passed from parent form
    Dim connection As String = "Data Source=" & _Compression.path
    Dim SQLConn As New SQLiteConnection(connection)
    Dim SQLcmd As New SQLiteCommand(SQLConn)
    Dim SQLdr As SQLiteDataReader
    SQLConn.Open()

    SQLcmd.Connection = SQLConn
    SQLcmd.CommandText = SQLstr
    SQLdr = SQLcmd.ExecuteReader()

    'For each query returned
    While SQLdr.Read()
        'Insert into textbox
        Form1.Textbox1.Text = (SQLdr.GetString(SQLdr.GetOrdinal("FileVersion_LTH")))
    End While

    'End the connection
    SQLdr.Close()
    SQLConn.Close()
End Sub

结束类

4

1 回答 1

4

您需要使用特定 ADO.NET 提供程序为 SQLite 提供的类。
首先,您需要安装从源站点下载所需的位。
请务必仔细阅读 64 位和 32 位提供程序和支持的框架的版本。

之后,您需要在项目引用部分引用提供程序并Imports System.Data.SQLite在源文件中添加适当的语句(替换System.Data.SqlClient那些)

最后,您需要更改代码以使用 SQLite 类并修复SQLite 语法的连接字符串

Dim connection As String = "Data Source=" & Form1.connstring & ";Version=3"
Dim SQLConn As New SQLiteConnection
Dim SQLcmd As New SQLiteCommand
Dim SQLdr As SQLiteDataReader

SQLConn.ConnectionString = connection
SQLConn.Open()

SQLcmd.Connection = SQLConn
SQLcmd.CommandText = SQLstr
SQLdr = SQLcmd.ExecuteReader()
While SQLdr.Read()
    MessageBox.Show(SQLdr(fieldIndexHere).ToString)
    Form1.ListBox1.Text = SQLdr(fieldIndexHere).ToString
End While

SQLdr.Close()
SQLConn.Close()
于 2013-10-23T22:10:09.210 回答