65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 VB.NET 以编程方式创建 ADO.NET SQLite 数据库

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.10/5 (3投票s)

2014 年 9 月 3 日

CPOL

3分钟阅读

viewsIcon

34262

downloadIcon

1737

使用 VB.NET 以编程方式创建 ADO.NET SQLite 数据库

引言

本文将向您展示如何使用 VB.NET 以编程方式创建 ADO.NET SQLite 数据库。

我正在使用 ADO.NET Data Provider for SQLite。 来源于 Finisar.SQLite,源代码和二进制 DLL 文件可以从 Finisar.SQLite 网站下载。 此示例使用 x86 二进制文件。

开始一个新项目时,不要忘记导入

  • SQLite.NET,在“引用”>“浏览”中添加,然后选择 SQLite.NET.dll
  • System.Configuration,在“引用”>“程序集”>“框架”中添加

不要忘记设置“编译”>“目标 CPU”>“x86”。 万一出现错误,请尝试安装 Microsoft Visual C++ 运行时库。

而且,这个文件必须放入 debugrelease 文件夹中

  1. SQLite3.dll
  2. SQLite.dll

背景

我提出这个想法是因为我的应用程序需要一个数据库。 代码实现对于 Winform 和 ASP.NET 项目来说几乎相同,只需要做一些工作。

Using the Code

所以,让我们开始研究代码吧。

对于完整的源代码,最好下载源代码并查找这些文件

  1. App.config
  2. CloudAppSettings.vb
  3. CloudCreateSQLiteDatabase.vb

我们从 app.config 开始。 这些是添加到 app.config 的几个设置

    <appSettings>
      <!-- database root-->
      <add key="dbroot" value="database"/>
      <!-- database root-->
      <!-- SQLite Database-->
      <!-- Database_Provider-->
      <add key="Database_sqlite_Provider" value="Data Source=%mdbfilepath%;Version=3;"/>    
      <!-- Database_Provider-->
      <!-- database_sqlite filename only without extension -->
      <add key="Database_sqlite_sample1" value="sample1"/>
      <add key="Database_sqlite_sample2" value="sample2"/> 
      <!-- database_sqlite filename only -->
      <!-- SQLite Database-->
    </appSettings>  

dbroot,是您保存数据库文件的文件夹,只是文件夹名称。 在这种情况下,它是 database

    <!-- database root-->
    <add key="dbroot" value="database"/>
    <!-- database root-->

Database_sqlite_Provider 是默认值。

    <!-- Database_Provider -->
    <add key="Database_sqlite_Provider" value="Data Source=%mdbfilepath%;Version=3;"/>    
    <!-- Database_Provider -->    

命名数据库文件和键。 在这种情况下,键是 Database_sqlite_sample1,文件名是 sample1。 您必须在此处添加更多项目,并且您还有另一个数据库文件。

      <!-- database_sqlite filename only without extension -->
      <add key="Database_sqlite_sample1" value="sample1"/>
      <add key="Database_sqlite_sample2" value="sample2"/> 
      <!-- database_sqlite filename only -->   

现在,这是代码。

要创建一个新数据库,您只需要做一行代码。

        CloudCreateSQLiteDatabase.CreateNewDatabase(CloudCreateSQLiteDatabase.SQLiteDatabaseType.sample1)
        CloudCreateSQLiteDatabase.CreateNewDatabase(CloudCreateSQLiteDatabase.SQLiteDatabaseType.sample2)

但是,在此之前,您需要做一些工作。

步骤 1:添加您的数据库 id。 如果您有 3、4、5 个数据库,只需输入您喜欢的任何名称,例如 sample3=2

         Public Enum SQLiteDatabaseType
        sample1 = 0
        sample2 = 1
    End Enum  

步骤 2:从 app.config 获取数据库文件名以创建有效的文件路径

  1. dbroot,获取数据库文件夹路径
  2. 检查路径,如果不存在,则创建它
  3. App.config 获取数据库文件名
  4. 创建一个有效的数据库文件路径
Shared Function SQLiteConnDatabaseFilePath(stype As SQLiteDatabaseType) As String

        Dim dbroot As String = CloudAppSettings.GetValidDatabaseRoot
        Dim dbfilename As String = ""

        'check if the db folder not exist then create it
        If Directory.Exists(dbroot) = False Then
            Directory.CreateDirectory(dbroot)
        End If

        'get the access file name from app.config
        Select Case stype
            Case SQLiteDatabaseType.sample1
                dbfilename = CloudAppSettings.GetConfigAppSettingsByName("Database_sqlite_sample1")
            Case SQLiteDatabaseType.sample2
                dbfilename = CloudAppSettings.GetConfigAppSettingsByName("Database_sqlite_sample2")
        End Select

        dbfilename = String.Format("{0}{1}", dbfilename, ".sqlite")
        dbroot = String.Format("{0}{1}", dbroot, dbfilename)
        Return dbroot
    End Function   

步骤 2.1:如果您添加了任何新数据库,则只需要更改此部分。

        Select Case stype
            Case SQLiteDatabaseType.sample1
                dbfilename = CloudAppSettings.GetConfigAppSettingsByName("Database_sqlite_sample1")
            Case SQLiteDatabaseType.sample2
                dbfilename = CloudAppSettings.GetConfigAppSettingsByName("Database_sqlite_sample2")
        End Select   

步骤 3:如果您的 SQLiteDatabaseType Enum 包含 SQLiteDatabaseType.sample3,则编写数据库表命令,因此您必须为此编写一些内容。

注意:自动递增在这里实际上不起作用。

    Shared Function CommandString(DatabaseType As SQLiteDatabaseType) As ArrayList
        Dim result As New ArrayList
        Select Case DatabaseType 
            Case SQLiteDatabaseType.sample1
                result.Add("CREATE TABLE sample1 ([id] COUNTER IDENTITY(1,1), _
                [samplename] LONGTEXT,[sampleid] LONG, [samplevalue] LONG, PRIMARY KEY (id))")
            Case SQLiteDatabaseType.sample2
                result.Add("CREATE TABLE sample2 ([id] COUNTER IDENTITY(1,1), _
                [file_path] LONGTEXT,[file_extension] LONGTEXT ,[file_date] DATETIME, _
                [file_name] LONGTEXT, PRIMARY KEY (id))")
                result.Add("CREATE TABLE sample3 ([id] COUNTER IDENTITY(1,1), _
                [file_path] LONGTEXT,[file_extension] LONGTEXT ,[file_date] DATETIME, _
                [file_name] LONGTEXT, PRIMARY KEY (id))")
        End Select
        Return result
    End Function  

步骤 4:从 App.config 获取 SQLite 连接设置

    Shared Function SQLiteConnSettings(stype As SQLiteDatabaseType) As String

        Dim dbroot As String = SQLiteConnDatabaseFilePath(stype)
         
        Dim returnvalue As String = CloudAppSettings.GetConfigAppSettingsByName("Database_sqlite_Provider").Trim
        returnvalue = returnvalue.Replace("%mdbfilepath%", dbroot)
        Return returnvalue
    End Function

所以,现在您理解了一点吗?

核心

以上所有准备工作都是为了这段代码。

  1. 获取数据库文件路径。
  2. 获取连接字符串。
  3. 创建 SQLiteConnection
  4. 检查数据库是否已存在。
  5. 创建数据库表,一个或多个表。
  6. 完成
  7. 如果出错,关闭 SQLiteConnection 并删除数据库文件。
    Public Shared Sub CreateNewDatabase(DatabaseType As SQLiteDatabaseType)

        Dim dbfile As String = SQLiteConnDatabaseFilePath(DatabaseType)
        Dim con As String = SQLiteConnSettings(DatabaseType)
        'Note - use New=True to create a new database
        Dim conn As SQLiteConnection = New SQLiteConnection(con & "New=True;")
        Try
            If File.Exists(dbfile) = True Then
                'database already exist
            Else

                If CommandString(DatabaseType).Count > 1 Then
                    conn.Open()
                    For items = 0 To CommandString(DatabaseType).Count - 1
                        Dim cmdCreate As New SQLiteCommand
                        With cmdCreate
                            .Connection = conn
                            .CommandText = CommandString(DatabaseType).Item(items).ToString
                        End With
                        cmdCreate.ExecuteNonQuery()
                    Next
                    conn.Close()
                Else
                    Dim cmdCreate As New SQLiteCommand
                    With cmdCreate
                        .Connection = conn
                        .CommandText = CommandString(DatabaseType).Item(0).ToString
                    End With
                    conn.Open()
                    cmdCreate.ExecuteNonQuery()
                    conn.Close()
                End If
                 
            End If
        Catch ex As SQLiteException
            conn.Close()
            'delete the failed database
            File.Delete(dbfile)
            MsgBox(ex.Message, MsgBoxStyle.Exclamation, "SQLiteException")
        End Try

    End Sub  

关注点

阅读本教程后,您可以参考 使用 VB.NET 以编程方式创建 Access 数据库,无需 Microsoft Office

历史

  • 2014 年 8 月 31 日:初始版本
© . All rights reserved.