本文深入解析 DataProvider 的資料庫連線配置(節點式與簡易雙模式)、面向連線與非連線雙操作模式、OracleProvider/SqlProvider 完整方法表、以及DBProvider 反射工廠擴充機制。
<IsLine.Data.Configuration>
<DataBaseConnection>
<DBType>IsLine.Data.DataTypeEnum.DataBaseType.SqlServer</DBType>
<Server>Server IP</Server>
<UserID>sa</UserID>
<PwdType>Cryptography.Decrypting</PwdType> <!-- None / Decrypting / StrengthDecrypting -->
<Pwd>111111</Pwd>
<DataBase>UML</DataBase> <!-- SqlServer only -->
</DataBaseConnection>
</IsLine.Data.Configuration>
Oracle 範例:
<DBType>IsLine.Data.Configuration.OracleConnectString</DBType>
<Server>TNS別名</Server>
<OtherPlus>Provider=MSDAORA.1; Persist Security Info=False;</OtherPlus> <!-- Oracle Only -->
<add key="IsLine.Data.Configuration.SqlServerConnectString"
value="Data Source=Server IP;User;Password=111111;Integrated Security=no;Enlist=false;Pooling=true;" />
<add key="IsLine.Data.Configuration.OracleConnectString"
value="Data Source=TNS別名;User;Password=111111;Integrated Security=no;Enlist=false;Pooling=true;" />
| 模式 | 適用操作 | 資源管理 | 呼叫方式 |
|---|---|---|---|
| 面向連線 | 回傳 DataSet、DataReader、DataAdapter | 需實例化 Provider,用畢呼叫 Dispose() 釋放所有資源 |
new OracleProvider().ExecuteDataSet(...) |
| 非連線 | 單純執行 SQL/預存程式 | 靜態方法,無需資源釋放 | OracleProvider.ExecuteNonQuery(sql) |
| 方法 | 說明 | 需實例化 |
|---|---|---|
| ExecuteScalar (4 重載) | 回傳首欄首列值 | 否 |
| ExecuteNonQuery (5 重載) | 執行 SQL/SP,回傳影響列數 | 否 |
| ExecuteReader (5 重載) | 回傳 DataReader | 是 |
| ExecuteDataSet (5 重載) | 回傳 DataSet | 是 |
| ExecuteDataAdapter (5 重載) | 回傳 DataAdapter | 是 |
| Dispose() | 釋放所有資源 | 是 |
| conn / cmd | 指定實例專用 Connection/Command | 是 |
| 參數 | 型別 | 說明 |
|---|---|---|
| cmdText | string | SQL 語句或預存程式名稱 |
| connectionKey | string | web.config 連線字串 key(多資料庫切換用) |
| IsUsingOracleTransaction | bool | 啟用交易,交易內 SQL 用 ! 串接 |
| cmdType | CommandType | Text / StoredProcedure |
| commandParameters | params OracleParameter[] | 參數陣列 |
| connection | OracleConnection | 已建立的連線物件 |
| srcTable | string | DataSet 填充表名 |
// 1. 簡單 SQL 執行
OracleProvider.ExecuteNonQuery(sql);
// 2. 交易批次執行
OracleProvider.ExecuteNonQuery(sql, true, CommandType.Text, null);
// 3. 執行預存程式帶參數
var param = new OracleParameter[2];
param[0] = new OracleParameter("P1", OracleType.VarChar, 32) { Value = "a" };
param[1] = new OracleParameter("P2", OracleType.VarChar, 20) { Value = "b" };
OracleProvider.ExecuteNonQuery("SP_Name", null, CommandType.StoredProcedure, param);
// 4. 取得 DataReader
new OracleProvider().ExecuteReader(sql);
// 5. 取得 DataSet
new OracleProvider().ExecuteDataSet(sql);
// 6. 指定連線字串取得 DataSet
new OracleProvider().ExecuteDataSet(sql, "ConnectionStr", 0);
// 7. 預存程式回傳 DataSet
new OracleProvider().ExecuteDataSet(sql, CommandType.StoredProcedure, "TestTable", null);
IDBOperater 介面工廠,部署至約定路徑IsLine.Provider.DataProvider.CfgDllName 指定 DLLIsLine.Provider.DataProvider,類別:DBFactory,方法:GetDbProvider() : DbProviderFactoryDbProviderFactory,呼叫方式與 OracleProvider/SqlProvider 相同
DataProvider 以「雙配置模式適應不同團隊習慣、雙操作模式精準匹配場景、標準化方法表降低認知負擔、反射工廠支援第三方資料庫」四大設計,構建了高內聚、低耦合、強擴充性的資料存取層。