<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # SQLite Visual Basic 簡介 > 原文: [http://zetcode.com/db/sqlitevb/intro/](http://zetcode.com/db/sqlitevb/intro/) 在 SQLite Visual Basic 教程的第一章中,我們將提供必要的定義。 我們將展示如何安裝 Mono & Visual Basic。 本教程中的所有示例都將在 Mono 上運行。 稍后,我們創建第一個工作示例。 ## 關于 SQLite 數據庫 `SQLite`是嵌入式關系數據庫引擎。 它的開發者稱其為自包含,無服務器,零配置和事務型 SQL 數據庫引擎。 它非常受歡迎,當今全球有數億本使用。 SQLite 用于 Solaris 10 和 Mac OS 操作系統,iPhone 或 Skype。 Qt4 庫對 SQLite 以及 Python 或 PHP 語言提供了內置支持。 許多流行的應用內部都使用 SQLite,例如 Firefox 或 Amarok。 ```vb $ sudo apt-get install sqlite3 ``` 如果尚未安裝`sqlite3`庫,則需要安裝它。 SQLite 附帶`sqlite3`命令行工具。 它可用于對數據庫發出 SQL 命令。 現在,我們將使用`sqlite3`命令行工具創建一個新數據庫。 ```vb $ sqlite3 test.db SQLite version 3.6.22 Enter ".help" for instructions Enter SQL statements terminated with a ";" ``` 我們為`sqlite3`工具提供了一個參數。 `test.db`是數據庫名稱。 它是我們磁盤上的單個文件。 如果存在,則將其打開。 如果不是,則創建它。 ```vb sqlite> .tables sqlite> .exit $ ls test.db ``` `.tables`命令提供了`test.db`數據庫中的表列表。 當前沒有表。 `.exit`命令終止`sqlite3`命令行工具的交互式會話。 `ls` Unix 命令顯示當前工作目錄的內容。 我們可以看到`test.db`文件。 所有數據將存儲在該單個文件中。 ## Mono Mono 是基于 C# 和公共語言運行時的 ECMA 標準的 Microsoft .NET Framework 的開源實現。 在本教程中,我們需要安裝 Mono 才能編譯和運行示例。 可以從 Linux 發行版的包中安裝 Mono,也可以從源代碼中安裝 Mono,以獲得更多最新版本。 ```vb $ bunzip2 mono-2.10.8.tar.bz2 $ tar -xf mono-2.10.8.tar $ cd mono-2.10.8/ $ ./configure $ make $ sudo make install ``` 我們從 Mono 網站下載`mono-2.10.8.tar.bz2` tarball。 我們將其解壓縮,構建并安裝庫。 我們安裝了 Mono 運行時,C# 語言和 SQLite .NET 數據適配器。 ```vb $ bunzip2 libgdiplus-2.10.9.tar.bz2 $ tar -xf libgdiplus-2.10.9.tar $ cd libgdiplus-2.10.9/ $ ./configure $ make $ sudo make install ``` 對于帶有 Winforms 控件的示例,我們還需要`libgdiplus`庫。 它位于單獨的文件中。 我們構建并安裝它。 ```vb $ sudo ldconfig $ ldconfig -p | grep libgdiplus libgdiplus.so.0 (libc6) => /usr/local/lib/libgdiplus.so.0 libgdiplus.so (libc6) => /usr/local/lib/libgdiplus.so ``` 我們還運行`ldconfig`工具來更新動態庫的數據庫。 `ldconfig`掃描正在運行的系統,并設置用于加載共享庫的符號鏈接。 `Mono.Data.Sqlite`程序集包含 SQLite 數據庫的 ADO.NET 數據供應器。 它用 C# 編寫,并且可用于所有 CLI 語言,包括 C# ,Visual Basic 和 Boo。 ```vb $ ls /usr/local/lib/mono/4.0/Mono.Data.Sqlite.dll /usr/local/lib/mono/4.0/Mono.Data.Sqlite.dll ``` 從技術角度來看,我們需要一個 DLL。 在我們的系統上,它位于上述路徑下。 (實際上,上面的鏈接是指向 DLL 的軟鏈接,該 DLL 位于`gac`子目錄中。) ## Visual Basic `Visual Basic`是一種現代的,高層通用的,基于對象的編程語言。 它是.NET 框架中第二重要的語言。 該語言的主要設計目標是創建一種易于使用和學習的編程語言。 它源自經典的 BASIC 語言。 Mono 將 Visual Basic 引入 Unix 平臺。 它在單獨的包中具有 Visual Basic 編譯器。 ```vb $ bunzip2 mono-basic-2.10.tar.bz2 $ tar xvf mono-basic-2.10.tar $ cd mono-basic-2.10/ ``` 我們從 Mono 項目網站下載資源。 我們對文件進行壓縮,然后進入新創建的子目錄。 ```vb $ ./configure $ make $ sudo make install ``` 我們建立&安裝編譯器。 ```vb $ ls /usr/local/bin/vbnc* /usr/local/bin/vbnc /usr/local/bin/vbnc2 ``` 編譯器稱為 vbnc,默認情況下位于`/usr/local/lib/bin`目錄中。 ## ADO.NET `ADO.NET`是.NET 框架的重要組成部分。 該規范統一了對關系數據庫,XML 文件和其他應用數據的訪問。 從程序員的角度來看,它是一組與數據庫和其他數據源一起使用的庫和類。 `Mono.Data.SQLite`是 SQLite 數據庫的 ADO.NET 規范的實現。 它是用 C# 語言編寫的驅動程序,可用于所有 .NET 語言。 `SqliteConnection`,`SqliteCommand`,`SqliteDataReader`和`SqliteDataAdapter`是.NET 數據供應器模型的核心元素。 `SqliteConnection`創建到特定數據源的連接。 `SqliteCommand`對象針對數據源執行一條 SQL 語句。 `SqliteDataReader`從數據源讀取數據流。 `SqliteDataAdapter`是`DataSet`和數據源之間的中介。 它填充`DataSet`并解析數據源的更新。 `DataSet`對象用于大量數據的離線工作。 它是一種斷開連接的數據表示形式,可以保存來自各種不同來源的數據。 `SqliteDataReader`和`DataSet`都用于處理數據。 它們在不同的情況下使用。 如果只需要讀取查詢結果,則`SqliteDataReader`是更好的選擇。 如果我們需要更廣泛的數據處理,或者要將 Winforms 控件綁定到數據庫表,則首選`DataSet`。 ## SQLite 版本 如果是第一個程序,我們將檢查 SQLite 數據庫的版本。 ```vb Option Strict On Imports Mono.Data.Sqlite Module Example Sub Main() Dim con As SqliteConnection Dim cmd As SqliteCommand Try Dim cs As String = "Data Source=:memory:" con = New SqliteConnection(cs) con.Open() Dim stm As String = "SELECT SQLITE_VERSION()" cmd = New SqliteCommand(stm, con) Dim version As String = Convert.ToString(cmd.ExecuteScalar()) Console.WriteLine("SQLite version : {0}", version) Catch ex As SqliteException Console.WriteLine("Error: " & ex.ToString()) Finally If cmd IsNot Nothing cmd.Dispose() End If If con IsNot Nothing Try con.Close() Catch ex As SqliteException Console.WriteLine("Failed closing connection") Console.WriteLine("Error: " & ex.ToString()) Finally con.Close() con.Dispose() End Try End If End Try End Sub End Module ``` 我們連接到內存數據庫,然后選擇 SQLite 版本。 ```vb Imports Mono.Data.Sqlite ``` `Mono.Data.SqliteClient`程序集包含 SQLite 數據庫引擎的 ADO.NET 數據供應器。 我們導入 SQLite 數據供應器的元素。 ```vb Dim con As SqliteConnection Dim cmd As SqliteCommand ``` 我們聲明兩個變量。 它們被放置在`Try`關鍵字之前,因為我們稍后將在它們上調用`Dispose()`和`Close()`方法。 ```vb Dim cs As String = "Data Source=:memory:" ``` 這是連接字符串。 數據提供者使用它來建立與數據庫的連接。 我們創建一個內存數據庫。 ```vb con = New SqliteConnection(cs) ``` 創建一個`SqliteConnection`對象。 該對象用于打開與數據庫的連接。 ```vb con.Open() ``` 這行打開數據庫連接。 ```vb Dim stm As String = "SELECT SQLITE_VERSION()" ``` 這是 SQL `SELECT`語句。 它返回數據庫的版本。 `SQLITE_VERSION()`是內置的 SQLite 函數。 ```vb Dim cmd As New SqliteCommand(stm, con) ``` `SqliteCommand`是一個對象,用于在數據庫上執行查詢。 參數是 SQL 語句和連接對象。 ```vb Dim version As String = Convert.ToString(cmd.ExecuteScalar()) ``` 有些查詢僅返回標量值。 在我們的例子中,我們需要一個簡單的字符串來指定數據庫的版本。 在這種情況下使用`ExecuteScalar()`。 我們避免了使用更復雜的對象的開銷。 ```vb Console.WriteLine("SQLite version : {0}", version) ``` 數據庫的版本將打印到控制臺。 ```vb Catch ex As SqliteException Console.WriteLine("Error: " & ex.ToString()) ``` 如果發生異常,我們將錯誤消息打印到控制臺。 ```vb Finally If cmd IsNot Nothing cmd.Dispose() End If ``` `SqliteCommand`類實現`IDisposable`接口。 因此,必須將其顯式放置在`Finally`塊中。 ```vb If con IsNot Nothing Try con.Close() Catch ex As SqliteException Console.WriteLine("Failed closing connection") Console.WriteLine("Error: " & ex.ToString()) Finally con.Close() con.Dispose() End Try End If ``` 關閉連接可能會引發另一個異常。 我們處理這種情況。 (盡管這種情況更有可能發生在基于服務器的數據庫中,例如 MySQL 或 PostgreSQL。) ```vb $ vbnc version.vb -r:Mono.Data.Sqlite.dll ``` 我們匯編示例。 提供了 SQLite 數據供應器 DLL 的路徑。 ```vb $ mono version.exe SQLite version : 3.7.7 ``` 這是我們系統上程序的輸出。 ## `using`語句 Visual Basic 語言實現垃圾回收。 這是一個自動釋放不再需要的對象的過程。 該過程是不確定的。 我們不能確定 CLR(公共語言運行時)何時決定釋放資源。 對于有限的資源,例如文件句柄或網絡連接,最好盡快釋放它們。 使用`Using`語句,程序員可以控制何時釋放資源。 當程序不在`Using`塊中時,到達其末尾或引發異常,資源將被釋放。 在內部,通過`Finally`塊中的`Dispose()`調用將`Using`語句轉換為`Try`和`Finally`塊。 請注意,您可能更喜歡使用`Try`,`Catch`和`Finally`塊,而不是`Using`語句。 特別是,如果您想顯式地利用`Catch`塊。 在本教程中,我們選擇了`Using`語句。 通常,當我們使用`IDisposable`對象時,應在`Using`語句中聲明并實例化它。 (或在`Finally`塊中調用`Dispose()`。)對于 SQLite ADO.NET 驅動程序,我們對`SqliteConnection`,`SqliteCommand`,`SqliteDataReader`,`SqliteCommandBuilder`使用`Using`語句。 和`SqliteDataAdapter`類。 我們不必將其用于`DataSet`。 或`DataTable`類。 他們可以留給垃圾收集器。 ```vb Option Strict On Imports Mono.Data.Sqlite Module Example Sub Main() Dim cs As String = "URI=file:test.db" Using con As New SqliteConnection(cs) con.Open() Using cmd As New SqliteCommand(con) cmd.CommandText = "SELECT SQLITE_VERSION()" Dim version As String = Convert.ToString(cmd.ExecuteScalar()) Console.WriteLine("SQLite version : {0}", version) End Using con.Close() End Using End Sub End Module ``` 我們有同樣的例子。 這次我們實現了`Using`關鍵字。 ```vb Using con As New SqliteConnection(cs) con.Open() Using cmd As New SqliteCommand(con) ``` `SqliteConnection`和`SqliteCommand`都實現`IDisposable`接口。 因此,它們用`Using`關鍵字包裝。 ## 創建并填充表 接下來,我們將創建一個數據庫表并用數據填充它。 ```vb Option Strict On Imports Mono.Data.Sqlite Module Example Sub Main() Dim cs As String = "URI=file:test.db" Using con As New SqliteConnection(cs) con.Open() Using cmd As New SqliteCommand(con) cmd.CommandText = "DROP TABLE IF EXISTS Cars" cmd.ExecuteNonQuery() cmd.CommandText = "CREATE TABLE Cars(Id INTEGER PRIMARY KEY," _ & "Name TEXT, Price INT)" cmd.ExecuteNonQuery() cmd.CommandText = "INSERT INTO Cars VALUES(1,'Audi',52642)" cmd.ExecuteNonQuery() cmd.CommandText = "INSERT INTO Cars VALUES(2,'Mercedes',57127)" cmd.ExecuteNonQuery() cmd.CommandText = "INSERT INTO Cars VALUES(3,'Skoda',9000)" cmd.ExecuteNonQuery() cmd.CommandText = "INSERT INTO Cars VALUES(4,'Volvo',29000)" cmd.ExecuteNonQuery() cmd.CommandText = "INSERT INTO Cars VALUES(5,'Bentley',350000)" cmd.ExecuteNonQuery() cmd.CommandText = "INSERT INTO Cars VALUES(6,'Citroen',21000)" cmd.ExecuteNonQuery() cmd.CommandText = "INSERT INTO Cars VALUES(7,'Hummer',41400)" cmd.ExecuteNonQuery() cmd.CommandText = "INSERT INTO Cars VALUES(8,'Volkswagen',21600)" cmd.ExecuteNonQuery() End Using con.Close() End Using End Sub End Module ``` 在上面的代碼示例中,我們創建具有 8 行的`Cars`表。 ```vb cmd.CommandText = "DROP TABLE IF EXISTS Cars" cmd.ExecuteNonQuery() ``` 首先,如果該表已經存在,則將其刪除。 如果我們不想要結果集,則可以使用`ExecuteNonQuery()`方法。 例如,對于`DROP`,`INSERT`或`DELETE`語句。 ```vb cmd.CommandText = "CREATE TABLE Cars(Id INTEGER PRIMARY KEY," _ & "Name TEXT, Price INT)" cmd.ExecuteNonQuery() ``` `Cars`表已創建。 `INTEGER PRIMARY KEY`列在 SQLite 中自動增加。 ```vb cmd.CommandText = "INSERT INTO Cars VALUES(1,'Audi',52642)" cmd.ExecuteNonQuery() cmd.CommandText = "INSERT INTO Cars VALUES(2,'Mercedes',57127)" cmd.ExecuteNonQuery() ``` 我們在表中插入兩行。 ```vb sqlite> .mode column sqlite> .headers on ``` 在`sqlite3`命令行工具中,我們修改了數據在控制臺中的顯示方式。 我們使用列模式并打開標題。 ```vb sqlite> SELECT * FROM Cars; Id Name Price ---------- ---------- ---------- 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600 ``` 我們驗證數據。 `Cars`表已成功創建。 ## 預備語句 現在,我們將以預備語句來關注自己。 在編寫預備語句時,我們使用占位符,而不是直接將值寫入語句中。 預準備的語句可提高安全性和性能。 ```vb Option Strict On Imports Mono.Data.Sqlite Module Example Sub Main() Dim cs As String = "URI=file:test.db" Using con As New SqliteConnection(cs) con.Open() Using cmd As New SqliteCommand(con) cmd.CommandText = "INSERT INTO Cars(Name, Price) VALUES(@Name, @Price)" cmd.Prepare() cmd.Parameters.AddWithValue("@Name", "BMW") cmd.Parameters.AddWithValue("@Price", 36600) cmd.ExecuteNonQuery() End Using con.Close() End Using End Sub End Module ``` 我們向`Cars`表添加一行。 我們使用參數化命令。 ```vb cmd.CommandText = "INSERT INTO Cars(Name, Price) VALUES(@Name, @Price)" cmd.Prepare() ``` 在這里,我們創建一個預備語句。 在編寫預備語句時,我們使用占位符,而不是直接將值寫入語句中。 預備語句更快,并且可以防止 SQL 注入攻擊。 `@Name`和`@Price`是占位符,稍后將填充。 ```vb cmd.Parameters.AddWithValue("@Name", "BMW") cmd.Parameters.AddWithValue("@Price", 36600) ``` 值綁定到占位符。 ```vb cmd.ExecuteNonQuery() ``` 執行預備語句。 當我們不希望返回任何數據時,我們使用`SqliteCommand`對象的`ExecuteNonQuery()`方法。 ```vb $ mono prepared.exe sqlite> SELECT * FROM Cars; Id Name Price ---------- ---------- ---------- 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600 9 BMW 36600 ``` 我們有一輛新車插入表。 ## 數據來源 已咨詢 MSDN(Microsoft 開發者網絡)來創建本教程。 該網站有幾種定義。 這是 SQLite Visual Basic 教程的介紹性章節。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看