前言
連接字串 是 ADO.NET 連接資料庫的鑰匙。不同資料庫提供者(Provider)、驗證方式、網路協定對應不同的連接字串格式。本文彙整四大主流資料庫的標準連接字串模板、參數說明與最佳實務,供開發快速查閱。
一、核心連接物件對應表
| 資料庫 | 命名空間 | 連接類別 | 提供者名稱 |
| SQL Server | System.Data.SqlClient | SqlConnection | System.Data.SqlClient |
| Oracle | System.Data.OracleClient | OracleConnection | System.Data.OracleClient |
| OLE DB (Access/舊版 SQL) | System.Data.OleDb | OleDbConnection | 依驅動而定 |
| ODBC | System.Data.Odbc | OdbcConnection | 依驅動而定 |
二、標準連接範本
1. SQL Server (SqlConnection)
// 標準安全性 (Windows 驗證)
Server=myServerAddress;Database=myDataBase;Integrated Security=True;
// SQL Server 驗證
Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
// 指定埠號、連線逾時、應用程式名稱
Server=myServerAddress,1433;Database=myDataBase;User Id=myUsername;Password=myPassword;
Connection Timeout=30;Application Name=MyApp;
// 本地資料庫 (LocalDB / SQL Express)
Server=(localdb)\MSSQLLocalDB;Database=MyDB;Integrated Security=True;
Server=.\SQLEXPRESS;Database=MyDB;Integrated Security=True;
// Azure SQL Database
Server=tcp:myServer.database.windows.net,1433;Database=myDataBase;
User Id=myUser@myServer;Password=myPassword;Encrypt=True;TrustServerCertificate=False;
Connection Timeout=30;
2. Oracle (OracleConnection)
// 使用 TNSNAMES.ORA 別名
Data Source=MyOracleTNS;User Id=myUsername;Password=myPassword;
// 直接指定主機/埠/服務名 (Easy Connect)
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myHost)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=myService)));User Id=myUsername;Password=myPassword;
// 簡易 EZConnect 格式 (Oracle 10g+)
Data Source=myHost:1521/myService;User Id=myUsername;Password=myPassword;
// Windows 驗證 (需設定 sqlnet.ora)
Data Source=MyOracleTNS;Integrated Security=yes;
3. Access (OleDbConnection)
// Access 2007+ (.accdb) - ACE Provider
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Data\MyDB.accdb;Persist Security Info=False;
// Access 2003 (.mdb) - Jet Provider
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\MyDB.mdb;User Id=admin;Password=myPassword;
// 獨佔模式、唯讀
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Data\MyDB.accdb;Mode=Share Deny Write;
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Data\MyDB.accdb;Mode=Read;
4. ODBC (OdbcConnection)
// SQL Server ODBC Driver
Driver={ODBC Driver 17 for SQL Server};Server=myServer;Database=myDB;Uid=myUser;Pwd=myPass;
// Oracle ODBC Driver
Driver={Oracle in OraClient12Home1};DBQ=myTNS;Uid=myUser;Pwd=myPass;
// Access ODBC
Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\Data\MyDB.accdb;Uid=admin;Pwd=myPass;
// DSN (資料來源名稱) - 需預先在 ODBC 管理員設定
DSN=MyOracleDSN;Uid=myUser;Pwd=myPass;
三、通用連接字串參數速查
| 參數 | 別名 | 說明 | 適用提供者 |
| Server / Data Source / Address | Addr, Network Address | 伺服器位址、埠號、實例名 | SQL Server, Oracle, ODBC |
| Database / Initial Catalog | | 資料庫名稱 | SQL Server |
| User Id / UID | User, Username | 登入帳號 | 全部 |
| Password / PWD | Pwd | 登入密碼 | 全部 |
| Integrated Security / Trusted_Connection | | Windows 驗證 | SQL Server, Oracle |
| Connection Timeout / Connect Timeout | | 連線逾時秒數 (預設 15-30) | 全部 |
| Application Name / App | | 應用程式名稱 (便於資料庫端識別) | SQL Server, Oracle |
| Persist Security Info | | 是否在連接物件保留密碼 (預設 false) | OLE DB, ODBC |
| Encrypt | | 強制 SSL/TLS 加密 (Azure SQL 必須 True) | SQL Server |
| TrustServerCertificate | | 信任伺服器憑證 (開發環境常設 True) | SQL Server |
| MultipleActiveResultSets (MARS) | | 單一連接支援多個作用中結果集 | SQL Server |
| Pooling | | 連接池啟用 (預設 true) | SQL Server, Oracle |
| Min Pool Size / Max Pool Size | | 連接池大小限制 | SQL Server, Oracle |
四、程式碼最佳實務模式
1. 連接字串外部化
<!-- Web.config / App.config -->
<connectionStrings>
<add name="DefaultConnection"
connectionString="Server=.;Database=MyDB;Integrated Security=True;"
providerName="System.Data.SqlClient" />
<add name="OracleConnection"
connectionString="Data Source=ORCL;User Id=app;Password=***;"
providerName="System.Data.OracleClient" />
</connectionStrings>
2. 使用 DbProviderFactory 達成提供者無關
public DbConnection CreateConnection(string connectionName)
{
var cs = ConfigurationManager.ConnectionStrings[connectionName];
var factory = DbProviderFactories.GetFactory(cs.ProviderName);
var conn = factory.CreateConnection();
conn.ConnectionString = cs.ConnectionString;
return conn;
}
// 使用
using (var conn = CreateConnection("DefaultConnection"))
{
conn.Open();
// 執行命令...
}
3. 連接池正確使用模式
// 正確:using 區塊確保連接歸還池中
using (var conn = new SqlConnection(connStr))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM Users";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read()) { /* 處理 */ }
}
}
} // 連接自動關閉並歸還池中
// 錯誤:手動 Open/Close 易洩漏
var conn = new SqlConnection(connStr);
conn.Open();
// 發生例外時連接不會關閉
conn.Close();
4. 連接字串建構器 (防止注入、語法錯誤)
var builder = new SqlConnectionStringBuilder
{
DataSource = @".\SQLEXPRESS",
InitialCatalog = "MyDB",
IntegratedSecurity = true,
ConnectTimeout = 30,
ApplicationName = "MyApp",
MultipleActiveResultSets = true
};
string connStr = builder.ConnectionString;
五、常見連線問題排查
| 錯誤訊息 | 可能原因 | 解決方向 |
| Login failed for user | 帳密錯誤、未授權資料庫 | 檢查 SQL Server 登入、使用者對應、權限 |
| Cannot open database requested | 資料庫不存在、名稱拼寫錯誤 | 確認 Database/Initial Catalog 參數 |
| Provider not registered | OLE DB/ODBC 驅動未安裝 | 安裝 ACE/OLEDB/ODBC Driver |
| Network-related or instance-specific error | 伺服器不可達、防火牆、埠號錯誤 | 測試連線、檢查 SQL Browser 服務、埠號 1433 |
| Keyword not supported | 參數名稱拼寫錯誤、提供者不支援 | 對照提供者支援參數表、使用 ConnectionStringBuilder |
| SSL Provider: certificate chain not trusted | 加密連線憑證不受信 | TrustServerCertificate=True 或安裝有效憑證 |
結語
連接字串看似簡單,實則關繫應用程式與資料庫的生命線。掌握各提供者標準格式、關鍵參數用途、外部化設定與連接池正確模式,能避免 80% 的連線問題。建議專案建立 ConnectionStrings.config 獨立管理、使用 DbProviderFactory 解耦提供者、善用 ConnectionStringBuilder 防錯,並將敏感資訊(密碼)透過 Azure Key Vault、環境變數或加密設定區段保護,而非硬編碼在原始碼中。