昨天晚上往Oracle數(shù)據(jù)庫里面保存一幅圖片,算是很稀松平常的大字段操作,搞了半天就是沒存進去,提示是“System.Data.OleDb.OleDbException: ORA-01008: 并非所有變量都已關(guān)聯(lián)”。本以為是OleDbParameter的寫法不對,到CSDN上一查,問題出在驅(qū)動程序上:把“provider=MSDAORA.1;”改為“provider='OraOleDb.Oracle';”,問題解決。
總結(jié)一下在 .Net 中讀寫Oracle數(shù)據(jù)庫常用兩種方式:OracleClient和OleDb,其中OleDb的方式根據(jù)驅(qū)動程序的不同又有兩種。
1. OracleClient方式,是微軟專門針對Oracle數(shù)據(jù)庫開發(fā)的,僅在 .NET Framework 1.1 版中受支持。據(jù)說速度快、性能好,是推薦使用的方式。但根據(jù)我的經(jīng)驗,當(dāng)Oracle數(shù)據(jù)庫服務(wù)器端采用英文字符集比如 US7ASCII 時,客戶端不管字符集如何設(shè)置,讀出的中文都是亂碼;若服務(wù)器端用中文字符集比如 ZHS16GBK ,則無亂碼問題。
引用類庫:System.Data.OracleClient.dll。
命名空間:System.Data.OracleClient。
常用類:OracleConnection、OracleCommand、OracleDataAdapter、OracleTransaction、OracleDataReader等。
典型連接字符串:“data source=oratest;user id=scott;password=tiger”(注意:可不指定 provider 驅(qū)動)。
2. OleDb方式,微軟和Oracle公司各自提供了OleDb的驅(qū)動程序,使用方法的差別很少。不管Oracle服務(wù)器端用何字符集,讀寫中文均無亂碼問題。
相同之處
命名空間:System.Data.OleDb。
常用類:OleDbConnection、OleDbCommand、OleDbDataAdapter、OleDbTransaction、OleDbDataReader等。
不同之處
引用類庫:微軟的只需要System.Data.dll;若用Oracle的驅(qū)動,雖然也只要引入System.Data.dll,但前提是首先安裝
