2014-01-28 17 views
0

我正在編寫使用postgres數據庫的代碼。這段代碼已經使用了oracle特定的函數,並添加了一些函數來訪問postgres表。需要構建的版本僅使用postgres功能,不需要oracle的代碼行,因此不需要ODAC。如何避免在c#.net中編譯代碼的ODAC許可項目

http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html

有喜歡加入條件編譯爲C#所以不執行Oracle專用代碼Postgres的選項。這樣做不會在已編譯的dll中添加基於ODAC的代碼部分,因此不需要ODAC,但這是唯一的方法。正如我所說的那樣,應用程序中有很多項目,並且執行條件編譯會創建大量額外的代碼。

或者還有什麼可以避免ODAC許可的其他選擇。

感謝,

function GetData() 
{ 
if(Postgres flag){ 
// code for using OracleClientFactory and initlizing the oraclecommand 

} 
else if(Oracle flag) 
{ 
    // code for using postgres and initlizing the its command object 
} 


} 
// code to assign query to command object and execute the query 
// return the resluts 

catch(){} 
finally{//dispoing the objects} 

}

}

回答

0

尋找到不同的選擇後一種可能可以使用C#動態關鍵字。它將允許我們在運行時獲得所需的類型,並且可以修復編譯錯誤。在相同的路線上,我們可以使用 ObjectHandle objObjectHandle = Activator.CreateInstance在運行時創建實例,並可以使用展開函數將其消耗。

Using Activator.CreateInstance to get the object type at runtime.

ObjectHandle objObjectHandle = Activator.CreateInstance("Npgsql","Npgsql.NpgsqlDataAdapter");

使用動態關鍵字將被要求使用Microsoft.CSharp.dll版本4,在項目文件中添加其參考。我們正在研究的其他解決方案是創建一個庫項目併爲這兩種類型的數據庫建立一個標準對象模型。