簡單的說就是要把底層改成連到 Oracle 去,
但是又不想 hard code 直接把所有的 SqlConnection 改成 OracleConnection,
然後就想到上次那個泛型的寫法【C# - 如何知道泛型的型態?】,
但是不幸的是...原來上次那個寫法只能用在基本資料型態,
所以我沒有辦法依照上次那樣寫來區分 SqlConnection 跟 OracleConnection,
但是我想應該是有辦法的才對,所以又要找好朋友估狗了!
後來測試出可以用 typeof 的方式寫,
先改涵式的宣告,如下:
private T GetConnection<T>
在程式裡面可以用下面的方式這樣判斷:
if (typeof(T) == typeof(OracleConnection))
if (typeof(T) == typeof(SqlConnection))
用這樣來區分 SqlConnection 跟 OracleConnection,
不過回傳的時候也不可以直接回傳,前面要加上 (T)(Object) ,
程式如下:
string connStr =
GetConnectionString<OracleConnection>();
OracleConnection conn = new OracleConnection(connStr);
conn.Open();
return (T)(object)conn;
如果要回傳 null 的時候也是一樣:
return (T)(object)null;
另外發現另外一種用法,就是要組 ConnectString 的時候我是呼叫另一個涵式,
固定回傳字串,但是因為 SQL Server 跟 Oracle 的連線字串不一樣,
所以我也想要他可以依照不同的需求回傳,
以前都呆呆的多加一個變數來判斷,剛剛測試發現用泛型就可以處理了,
宣告如下:
public string GetConnectionString<T>()
然後程式裡面再用前面的判斷方式就可以,
呼叫的程式就會像是這樣。
string connStr = GetConnectionString<OracleConnection>();
突然覺得泛型好好用啊!
但是要會寫有點難ㄟ,台灣的參考資料好少啊~~~
然後...底層要共用還有好多問題要解決喔!囧rz...
沒有留言:
張貼留言