2009-08-09 26 views
16

Tôi đang sử dụng Visual Studio 2008 Express Edition và tôi đang cố gắng phát triển một ứng dụng nhỏ bằng Oracle.DataClient. Tôi nhận được lỗi được đề cập ở trên, khi cố gắng kết nối với cơ sở dữ liệu trong hệ thống đích.Nhà cung cấp không tương thích với phiên bản lỗi máy khách Oracle khi sử dụng Oracle.DataClient

Tôi đã thêm tham chiếu đến nhà cung cấp Oracle ODP.net cho Oracle 10gR2 và trong máy đích tôi có bản sao của cơ sở dữ liệu Oracle 10gR2 được cài đặt. Mặc dù vậy, tôi nhận được lỗi. Trước khi đăng bài này, tôi đọc this post tại SO, và tôi đã cài đặt ứng dụng khách ngay lập tức, lỗi vẫn tồn tại. Dưới đây là ngăn xếp lỗi đầy đủ.

************** Exception Text ************** 
System.TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception. ---> Oracle.DataAccess.Client.OracleException The provider is not compatible with the version of Oracle client at Oracle.DataAccess.Client.OracleInit.Initialize() 
    at Oracle.DataAccess.Client.OracleConnection..cctor() 
    --- End of inner exception stack trace --- 
    at Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString) 
    at Employees1.frmLogin.oralogin() 
    at Employees1.frmLogin.btnTest_Click(Object sender, EventArgs e) 
    at System.Windows.Forms.Control.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
    at System.Windows.Forms.Button.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 


************** Loaded Assemblies ************** 
mscorlib 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.42 (RTM.050727-4200) 
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll 
---------------------------------------- 
API Data Conversion Assistant 
    Assembly Version: 0.0.0.1 
    Win32 Version: 0.0.0.1 
    CodeBase: file:///C:/Documents%20and%20Settings/3i/My%20Documents/My%20Dropbox/Sathya's%20dropbox/VisualStudio%20Releases/APIDataconversion/Application%20Files/API%20Data%20Conversion%20Assistant_0_0_0_3/API%20Data%20Conversion%20Assistant.exe 
---------------------------------------- 
System.Windows.Forms 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.42 (RTM.050727-4200) 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll 
---------------------------------------- 
System 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.42 (RTM.050727-4200) 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll 
---------------------------------------- 
System.Drawing 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.42 (RTM.050727-4200) 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll 
---------------------------------------- 
Oracle.DataAccess 
    Assembly Version: 2.102.2.20 
    Win32 Version: 2.102.2.20 

Tôi đã cài đặt Oracle 11g trên máy mà tôi đã phát triển ứng dụng và hoạt động tốt ở đó, nhưng trên máy đích, tôi gặp phải lỗi này. Bất kỳ đầu vào nào cũng sẽ được đánh giá cao.

PS: Như đã đề cập ở trên, phiên bản tệp Oracle.DataClient.dll được tham chiếu tương ứng với 10gR2, chứ không phải 11g.

+3

Sẽ tốt đẹp nếu những người bỏ phiếu bầu một câu hỏi sẽ cung cấp (các) lý do của họ trong một bình luận ... – DCookie

+1

Tôi nghĩ đó là một câu hỏi hay, vì tôi đã dành tất cả buổi sáng đấu tranh với cùng một vấn đề. – Chris

Trả lời

17

Tôi đã nhìn vào vấn đề này hơn nữa, và bạn chỉ cần lấy tất cả thích hợp DLL từ phiên bản tải về cùng một ODP.Net và đặt chúng trong cùng thư mục với tập tin Exe của bạn, bởi vì ODP.Net là cầu kỳ về không trộn số phiên bản, đó là vấn đề bạn đang nhìn thấy (hoặc là hoặc oci.dll là hoàn toàn mất tích, trong trường hợp nó gây phiền nhiễu cho cùng một lỗi).

Tôi đã giải thích làm thế nào để làm điều này ở đây: http://splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c Dưới đây là các ý chính của nó mặc dù:

  • Tải http://www.oracle.com/technology/software/tech/windows/odpnet/index1110710beta.html
  • Giải nén file
  • Giải nén tất cả các của JAR trong đó
  • Grab những dll này vừa được giải nén: oci.dll (được đổi tên từ 'oci.dll.dbl') Oracle.DataAccess.dll oraociicus11.dll.210 OraOps11w.dll orannzsbb11.dll oraocci11.dll ociw32.dll (đổi tên từ 'ociw32.dll.dbl')
  • Đặt tất cả các file DLL trong thư mục tương tự như của bạn C# thực thi
+0

Cảm ơn rất nhiều chỉ dẫn, nó hoạt động như một sự quyến rũ! Đối với những người khác có cùng một vấn đề: [phiên bản mới nhất] (http://download.oracle.com/otn/nt/instantclient/112020/instantclient-basic-nt-11.2.0.2.0.zip) chứa các tệp DLL trực tiếp . –

1

Bạn đã tạo và thử nghiệm thành công kết nối bằng cách sử dụng Quản trị viên ODBC trên hệ thống khách hàng của bạn chưa?

Có bản vá cho vấn đề quyền trong ứng dụng khách 9i và 10g dẫn đến lỗi này. Nếu bạn đang ở 10.2.0.1, bạn có thể cần nâng cấp lên 10.2.0.3 để giải quyết vấn đề này.

+0

@dcookie: Có kết nối ODBC thành công, vì SP của tôi truy xuất dữ liệu từ máy chủ MS SQL vào bảng Oracle. – Sathya

0

Tôi đã làm cho ứng dụng của mình sử dụng kết nối Ole DB (System.Data.Oledb namespace) và nó hoạt động tốt. Xét rằng ứng dụng chỉ là giao diện người dùng gọi Oracle SP và không có giá trị nào được trả về, tôi đoán phương pháp này được chấp nhận, bởi vì trong 2 ngày tôi đã cố gắng tìm giải pháp cho vấn đề này, tôi có thể đã hoàn thành rất nhiều phát triển hơn trên ứng dụng. Tôi vẫn mở cửa cho các câu trả lời, vì tôi có thể tìm hiểu từ những sai lầm mà tôi cam kết đối với bất kỳ ứng dụng nào như vậy trong tương lai.

0

Tôi đã gặp phải sự cố tương tự. Nếu bạn có máy khách 11g được cài đặt trên máy tính của mình, thì bạn cần phải sử dụng DLL ODP.Net 11g. Tôi đã phải gỡ bỏ hoàn toàn tất cả mọi thứ, và sau đó cài đặt các khách hàng 11g, và sau đó các trình điều khiển ODP.NET 11g. Các trình điều khiển được cài đặt trong GAC và nó sẽ được kinda một nỗi đau.

* Lưu ý, nó là sự hiểu biết của tôi từ DBA của tôi rằng điều này chỉ hoạt động nếu bạn không cần phải kết nối với bất kỳ phiên bản thấp hơn 9i *

Chúng tôi phải làm điều này trên các máy chủ của chúng tôi cũng có.

HTH

Các vấn đề liên quan