VB.NET 建構於 .NET Framework 之上,資料存取核心為 ADO.NET。其架構採用 Provider 模式:針對不同資料庫來源提供對應的 Connection、Command、DataReader、DataAdapter 實作。本文完整列出三大標準 Provider 的適用資料庫、命名空間、連線字串模板與開啟/關閉程式碼範本。
| Provider 名稱 | 命名空間 | 核心類別 | 支援資料庫 |
|---|---|---|---|
| SQL Server .NET Data Provider | System.Data.SqlClient | SqlConnection 等 | SQL Server 7.0+ (僅限) |
| OLE DB .NET Data Provider | System.Data.OleDb | OleDbConnection 等 | Access, Oracle, SQL Server, 其他 OLE DB 來源 |
| ODBC .NET Data Provider | System.Data.Odbc | OdbcConnection 等 | Access, Oracle, SQL Server, MySQL, VFP, 任何 ODBC 驅動 |
注意:System.Data.Odbc .NET Framework 1.0 不內建,需另行下載 Microsoft.Data.Odbc.dll 並加入工具箱/參考。.NET 2.0+ 已內建。
Imports System.Data.SqlClient
Dim connStr As String = "Data Source=ServerName;Initial Catalog=DBName;User ID=sa;Password=;"
Dim sqlConn As New SqlConnection(connStr)
Try
sqlConn.Open()
' 執行命令...
Finally
sqlConn.Close() ' 或使用 Using 區塊自動 Dispose
End Try
連線字串關鍵字:Data Source/Server, Initial Catalog/Database, Integrated Security=SSPI (Windows 驗證), Connection Timeout, Pooling。
Imports System.Data.OleDb
' 2.1 SQL Server (透過 SQLOLEDB)
Dim connStr1 As String = "Provider=SQLOLEDB;Data Source=Server;Initial Catalog=DB;User ID=sa;Password=;"
' 2.2 Access (Jet 4.0)
Dim connStr2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Data\Example.mdb;"
' 2.3 Oracle (MSDAORA)
Dim connStr3 As String = "Provider=MSDAORA;Data Source=OracleServer;User ID=uid;Password=pwd;"
Dim oleConn As New OleDbConnection(connStr2)
' 開啟/關閉同 SqlConnection
Access 2007+ (.accdb):Provider 改為 Microsoft.ACE.OLEDB.12.0,需安裝 Access Database Engine。
Imports System.Data.Odbc
' 系統 DSN
Dim connStrDsn As String = "DSN=MyOracleDSN;UID=uid;PWD=pwd;"
' 無 DSN (DSN-less) 範例:MySQL
Dim connStrMysql As String = "Driver={MySQL ODBC 5.3 Unicode Driver};Server=localhost;Database=test;Uid=root;Pwd=;"
Dim odbcConn As New OdbcConnection(connStrMysql)
' 開啟/關閉同前
{SQL Server}, {Microsoft Access Driver (*.mdb)}, {Oracle in OraClient11g_home1}, {MySQL ODBC 5.3 Unicode Driver}。
Using conn As New SqlConnection(connStr)
conn.Open()
Using cmd As New SqlCommand("SELECT * FROM Users", conn)
Using reader As SqlDataReader = cmd.ExecuteReader()
While reader.Read()
Console.WriteLine(reader("UserName"))
End While
End Using
End Using
End Using ' 自動呼叫 Dispose() → Close()
app.config / web.config <connectionStrings> 區段。Integrated Security 或 Azure Key Vault / DPAPI 加密區段。ConfigurationManager.ConnectionStrings("Name").ConnectionString 讀取。
目標資料庫 = SQL Server 7.0+ → SqlClient (最佳效能、功能完整)
目標資料庫 = Access/Oracle/其他 OLE DB → OleDb (次佳)
目標資料庫 = MySQL/PostgreSQL/舊系統/無 OLE DB 驅動 → Odbc (最廣泛)
跨資料庫抽象層需求 → 使用 DbProviderFactory 或 Entity Framework / Dapper
掌握三大 Provider 連線細節,即可應對 VB.NET 專案 99% 的資料庫整合場景。