9

Tôi đang cố chạy ứng dụng .NET sử dụng System.Data.OracleClient trên máy trạm Win7 x64. Máy trạm có một máy khách Oracle 32 bit được cài đặt, dẫn đến thông báo lỗi sau:Cách yêu cầu System.Data.OracleClient sử dụng Trình điều khiển Oracle 64 bit

Cố gắng tải các thư viện máy khách Oracle đã ném BadImageFormatException. Vấn đề này sẽ xảy ra khi chạy ở chế độ 64 bit với các thành phần máy khách Oracle 32 bit được cài đặt.

Vì vậy, đây là cuộc hành trình dài của tôi cố gắng và thất bại:

  1. Tôi cố gắng để cài đặt Oracle client win64_11gR2_client. Nhưng trong quá trình cài đặt, nó bị treo mà không có bất kỳ bình luận nào.
  2. Tôi đã theo dõi answer from a different SO thread, đã thử và trích xuất instantclient-basic-windows.x64-11.2.0.2.0 và đặt thư mục chứa các tệp nhị phân trong biến PATH của cửa sổ. Tôi vẫn nhận được thông báo lỗi tương tự mặc dù (ngay cả sau khi khởi động lại).
  3. Tôi đi theo "con đường thay thế" từ this answer và sao chép các tập tin oci.dll, orannzsbb11.dll,oraociei11.dll vào bin/thư mục của dự án trang web của tôi. Vẫn là thông báo lỗi tương tự.
  4. Tôi đã thử và sao chép tất cả tệp từ ứng dụng khách tức thì vào thư mục đó và thử lại, mà không thành công.
  5. Tôi đã cài đặt ODAC112021Xcopy_x64.zip và đặt thư mục cài đặt và thư mục bin vào cửa sổ biến PATH. Không thành công.
  6. tôi đặt hy vọng của tôi về this answer và xem xét các DllPath trong registry (mà thực sự là phải liên quan đến ODP.NET như trái ngược với System.Data.OracleClient) và thấy rằng điểm DllPath để quá trình cài đặt x64 đúng ODAC, vì vậy, nếu ứng dụng của tôi đã không sử dụng System.Data.OracleClient, nó sẽ hoạt động, nhưng vì nó sử dụng nó, nó vẫn không thành công.
  7. Tôi googled và stackoverflew nhưng không tìm thấy bất cứ điều gì khác mà các bài viết tôi đã đề cập đến.
  8. Tôi đã cẩn thận tạo câu hỏi SO này với hy vọng nhận được bất kỳ lời khuyên sâu sắc nào từ người dùng SO khai ngộ.
  9. Sau khi nhận được câu trả lời đầu tiên từ b_levitt, tôi đã cố gắng và thêm các dòng sau vào Global.asax tại Application_Start:

    Environment.SetEnvironmentVariable("ORACLE_HOME", @"C:\OracleProducts\Odac-11.2.0.2.1-x64"); 
    Environment.SetEnvironmentVariable("PATH", @"C:\OracleProducts\Odac-11.2.0.2.1-x64;C:\OracleProducts\Odac-11.2.0.2.1-x64\bin"); 
    

    C: \ OracleProducts \ Odac-11.2.0.2.1-x64 là nơi Tôi đã cài đặt phiên bản xcopy ODAC 64 bit. Không thành công.

Trên một lưu ý liên quan, tôi thậm chí đã cố gắng để force my .NET app into 32bit mode without success, nhưng đó là một điều khác nhau. Tôi cần một giải pháp hướng tới tương lai, có nghĩa là 64bit.

Trả lời

4

# 5 của bạn nên đã hoạt động nhưng bạn cũng cần phải đặt biến môi trường ORACLE_HOME. Tôi đã làm điều này nhiều lần bao gồm gần đây với cài đặt xcopy rất mà bạn đang sử dụng.Vui lòng xem my experience with the xcopy install và cho tôi biết loại lỗi bổ sung nào bạn nhận được.

Trong trường hợp của tôi, tôi đã cài đặt nó lên cho asp.net, nhưng winforms thậm chí còn dễ dàng hơn. Bạn có thể mở một cửa sổ cmd, sử dụng lệnh "set" để đặt cả hai biến môi trường PATH và ORACLE_HOME và sau đó chạy ứng dụng của bạn từ cùng cửa sổ cmd đó. Một khi bạn nhận được các lỗi làm việc ra, bạn có thể sử dụng Environment.SetEnvironmentVariable để thiết lập các trong mã của bạn.

Đối với hồ sơ, tôi tránh cài đặt client oracle trên các máy client bằng cách xử lý tất cả các logic kinh doanh thông qua các dịch vụ web. Bằng cách đó tôi chỉ cần các thành phần oracle trên máy chủ web.

+0

Điều này có vẻ đầy hứa hẹn. Sẽ có một thử khi trở lại làm việc. Trong thực tế, tôi có hai trường hợp của vấn đề này, một là một ASP.NET và một ứng dụng máy tính để bàn. – chiccodoro

+0

bạn sẽ không gặp vấn đề gì cả. Tôi đã có may mắn với các chức năng SetEnvironmentVariable cho ASP.net, Winforms, và thậm chí cả dịch vụ. Điều này tất nhiên chỉ cần thiết nếu bạn không muốn đặt các biến này ở mức hệ thống. Nếu đây là máy khách oracle duy nhất trên máy, tôi sẽ chỉ thiết lập các biến môi trường hệ thống ORACLE_HOME và PATH. –

+0

Xin chào b_levitt. Tôi đã thử điều đó, rất tiếc là tôi vẫn nhận được thông báo lỗi tương tự (xem # 9 mới trong câu hỏi được cập nhật của tôi) – chiccodoro

1

Tôi gặp vấn đề tương tự. Tôi tìm thấy hầu hết các câu trả lời của tôi thông qua diễn đàn Oracle và ở đây tại stackoverflow. Tôi không thể đăng liên kết để tham khảo nhưng tôi có thể cung cấp cho bạn một số điều để thử.

  1. Cũng bao gồm OraOps11w.dll trong thư mục bin của bạn cùng với các tệp dll Oracle khác.
  2. Đến các tính chất dự án | Reference Paths, thêm C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 hoặc C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 vào đường dẫn tham khảo tùy thuộc vào khuôn khổ phiên bản dự án đang sử dụng.
  3. phần mờ ** mà tôi không nhớ nổi: Hủy bỏ các tài liệu tham khảo hiện tại System.Data.OracleClient và thêm tham chiếu mới từ C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 hoặc C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 đến đường dẫn tham chiếu tùy thuộc vào phiên bản khung mà dự án đang sử dụng.

Xem nếu ngoại lệ sẽ biến mất.

FYI, Microsoft bị giảm cung cấp dữ liệu Oracle (trong ADO.NET) hỗ trợ trong tương lai gần. Nó hiện đang hoạt động thông qua .NET 4, nhưng nó là một ý tưởng tốt để bắt đầu thử nghiệm các trình điều khiển Oracle bản địa.

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