昨天晚上往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,但前提是首先安裝