往Oracle資料庫裡面儲存一幅圖片,算是很稀鬆平常的大欄位操作,搞了半天就是沒存進去,提示是“System.Data.OleDb.OleDbException: ORA-01008: 並非所有變數都已關聯”。本以為是OleDbParameter的寫法不對,到CSDN上一查,問題出在驅動程式上:把“provider=MSDAORA.1;”改為“provider='OraOleDb.Oracle';”,問題解決。
總結一下在 .Net 中讀寫Oracle資料庫常用兩種方式:OracleClient和OleDb,其中OleDb的方式根據驅動程式的不同又有兩種。
1. OracleClient方式,是微軟專門針對Oracle資料庫開發的,僅在 .NET Framework 1.1 版中受支援。據說速度快、效能好,是推薦使用的方式。但根據我的經驗,當Oracle資料庫伺服器端採用英文字元集比如 US7ASCII 時,用戶端不管字元集如何設定,讀出的中文都是亂碼;若伺服器端用中文字元集比如 ZHS16GBK ,則無亂碼問題。
引用類庫:System.Data.OracleClient.dll。
命名空間:System.Data.OracleClient。
常用類:OracleConnection、OracleCommand、OracleDataAdapter、OracleTransaction、OracleDataReader等。
典型連接字串:“data source=oratest;user id=scott;password=tiger”(注意:可不指定 provider 驅動)。
2. OleDb方式,微軟和Oracle公司各自提供了OleDb的驅動程式,使用方法的差別很少。不管Oracle伺服器端用何字元集,讀寫中文均無亂碼問題。
相同之處
命名空間:System.Data.OleDb。
常用類:OleDbConnection、OleDbCommand、OleDbDataAdapter、OleDbTransaction、OleDbDataReader等。
不同之處
引用類庫:微軟的只需要System.Data.dll;若用Oracle的驅動,雖然也只要引入System.Data.dll,但前提是首先安裝Oracle針對.Net的資料訪問組件。
連接字串:與OracleClient方式相比,要添加一個provider,微軟為“provider=MSDAORA.1;”,Oracle為“provider='OraOleDb.Oracle';”。