it-swarm-vi.tech

Dấu chân khách hàng tối thiểu cần có để kết nối C # với cơ sở dữ liệu Oracle là gì?

Tôi đã kết nối thành công với cơ sở dữ liệu Oracle (10g) từ C # (Visual Studio 2008) bằng cách tải xuống và cài đặt các công cụ quản trị khách hàng và Visual Studio 2008 trên máy tính xách tay của tôi.

Dung lượng cài đặt cho các công cụ Oracle Client là hơn 200Mb và khá dài.

Có ai biết dấu chân khả thi tối thiểu là gì? Tôi hy vọng rằng đó là một DLL và một lệnh đăng ký, nhưng tôi có cảm giác tôi cần phải cài đặt một ngôi nhà Oracle và đặt các biến môi trường khác nhau.

Tôi đang sử dụng Oracle.DataAccess trong mã của mình.

71
Jonathan

Bạn cần một Máy khách Oracle để kết nối với cơ sở dữ liệu Oracle. Cách dễ nhất là cài đặt Các thành phần truy cập dữ liệu của Oracle .

Để giảm thiểu dấu chân, tôi đề nghị như sau:

  • Sử dụng nhà cung cấp của Microsoft cho Oracle (System.Data.OracleClient), giao hàng với khung.
  • Tải xuống Gói ứng dụng khách tức thì của Oracle - Basic Lite: đây là tệp Zip có (gần như) mức tối thiểu. Tôi khuyên dùng phiên bản 10.2.0.4, nhỏ hơn nhiều so với phiên bản 11.1.0.6.0.
  • Giải nén các tệp sau trong một thư mục cụ thể: [.__.]
    • v10: [.__.]
      • oci.dll
      • orannzsbb10.dll
      • oraociicus10.dll
    • v11: [.__.]
      • oci.dll
      • orannzsbb11.dll
      • oraociei11.dll
  • Trên nền tảng x86, hãy thêm CRT DLL cho Visual Studio 2003 (msvcr71.dll) vào thư mục này, vì các chàng trai của Oracle đã quên đọc cái này ...
  • Thêm thư mục này vào biến môi trường PATH.
  • Sử dụng phương thức Easy Connect Naming trong ứng dụng của bạn để thoát khỏi tệp cấu hình TNSNAMES.ORA khét tiếng. Nó trông như thế này: sales-server:1521/sales.us.acme.com.

Số tiền này vào khoảng 19Mb (v10).

Nếu bạn không quan tâm đến việc chia sẻ thư mục này giữa một số ứng dụng, một giải pháp thay thế sẽ là gửi các DLL được đề cập ở trên cùng với các nhị phân ứng dụng của bạn và bỏ qua bước cài đặt PATH.

Nếu bạn thực sự cần sử dụng nhà cung cấp Oracle (Oracle.DataAccess), bạn sẽ cần:

  • ODP .NET 11.1.0.6.20 (phiên bản đầu tiên được cho là hoạt động với Instant Client).
  • Khách hàng ngay lập tức 11.1.0.6.0, rõ ràng.

Lưu ý rằng tôi chưa thử cấu hình mới nhất này ...

69
Mac

Tính đến năm 2014, OPD.NET, Managed Driver là dấu chân nhỏ nhất.

Dưới đây là so sánh sử dụng mã với các phiên bản không được quản lý mà các câu trả lời (lỗi thời) trước đó đã đề xuất: http://docs.Oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148

Bạn sẽ cần phải tải xuống các dll này và tài liệu tham khảo Oracle.ManagedDataAccess.dll trong dự án của bạn: Tải xuống chỉ ODP.NET, phiên bản Xcopy trình điều khiển được quản lý

Đây là một bản in chân điển hình mà bạn sẽ cần phải đóng gói với bản phát hành của mình:

  1. Oracle.ManagedDataAccess.dll
  2. Oracle.ManagedDataAccessDTC.dll

tất cả cùng nhau, một whopping 6.4 MB cho .Net 4.0.

16
ecoe

Tôi sử dụng phương pháp được đề xuất bởi Pandicus ở trên, trên Windows XP, sử dụng ODAC 11.2.0.2.1. Các bước thực hiện như sau:

  1. Tải xuống gói "ODAC 11.2 Phiên bản 3 (11.2.0.2.1) với Xcopy Deployment" từ Oracle.com (53 MB) và giải nén Zip.
  2. Thu thập các DLL sau: oci.dll (1 MB), oraociei11.dll (130 MB!), OraOps11w.dll (0.4 MB), Oracle.DataAccess.dll (1 MB). Những thứ còn lại có thể bị xóa, và không có gì phải cài đặt.
  3. Thêm một tham chiếu đến Oracle.DataAccess.dll, thêm using Oracle.DataAccess.Client; với mã của bạn và bây giờ bạn có thể sử dụng các loại như OracleConnection, OracleCommandOracleDataReader để truy cập cơ sở dữ liệu Oracle. Xem tài liệu lớp để biết chi tiết. Không cần sử dụng tệp cấu hình tnsnames.ora, chỉ có chuỗi kết nối phải được đặt đúng.
  4. 4 DLL trên phải được triển khai cùng với tệp thực thi của bạn.
15
kol

Cách này cho phép bạn kết nối với ODP.net bằng 5 tệp có thể phân phối lại từ Oracle:

Mục blog của Chris: Sử dụng ODP.Net mới để truy cập Oracle từ C # với triển khai đơn giản

Chỉnh sửa: Trong trường hợp blog bị sập, đây là một bản tóm tắt ngắn gọn ...

  • oci.dll
  • Oracle.DataAccess.dll
  • oraociicus11.dll
  • OraOps11w.dll
  • orannzsbb11.dll
  • oraocci11.dll
  • ociw32.dll

đảm bảo bạn nhận được TẤT CẢ các DLL từ cùng một bản phân phối ODP.Net/ODAC để tránh xung đột số phiên bản và đặt tất cả chúng vào cùng thư mục với EXE của bạn

14
Fidel

DevArt http://www.devart.com/ , trước đây là CoreLab (crlab.com) cung cấp ứng dụng khách C-Oracle thuần túy. Đó là một dll duy nhất, và nó hoạt động tốt.

8
Thomas Boesen

Đây là bản cập nhật cho Oracle 11.2.0.4.0 . Tôi đã thành công với quy trình sau trên Windows 7 bằng cách sử dụng System.Data.OracleClient.

1. Tải xuống Gói ứng dụng khách tức thì - Basic Lite : Windows 32-Bit hoặc 64-Bit .

2. Sao chép các tệp sau vào một vị trí trong đường dẫn hệ thống của bạn:

32-bit

 1,036,288  2013-10-11  oci.dll
   348,160  2013-10-11  ociw32.dll
 1,290,240  2013-09-21  orannzsbb11.dll
   562,688  2013-10-11  oraocci11.dll
36,286,464  2013-10-11  oraociicus11.dll

64-bit

   691,712  2013-10-09  oci.dll
   482,304  2013-10-09  ociw32.dll
 1,603,072  2013-09-10  orannzsbb11.dll
 1,235,456  2013-10-09  oraocci11.dll
45,935,104  2013-10-09  oraociicus11.dll

3. Xây dựng chuỗi kết nối bỏ qua nhu cầu về tnsnames.ora .

(Xem ví dụ trong chương trình thử nghiệm bên dưới.)

4. Chạy chương trình C # tối thiểu này để kiểm tra cài đặt của bạn:

using System;
using System.Data;
using System.Data.OracleClient;

class TestOracleInstantClient
{
    static public void Main(string[] args)
    {
        const string Host = "yourhost.yourdomain.com";
        const string serviceName = "yourservice.yourdomain.com";
        const string userId = "foo";
        const string password = "bar";

        var conn = new OracleConnection();

        // Construct a connection string using Method 1 or 2.
        conn.ConnectionString =
            GetConnectionStringMethod1(Host, serviceName, userId, password);

        try
        {
            conn.Open();
            Console.WriteLine("Connection succeeded.");
            // Do something with the connection.
            conn.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine("Connection failed: " + e.Message);
        }
    }

    static private string GetConnectionStringMethod1(
        string Host,
        string serviceName,
        string userId,
        string password
        )
    {
        string format =
            "SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
            "(Host={0})(PORT=1521))" +
            "(CONNECT_DATA=(SERVER=DEDICATED)" +
            "(SERVICE_NAME={1})));" +
            "uid={2};" +
            "pwd={3};"; // assumes port is 1521 (the default)

        return String.Format(format, Host, serviceName, userId, password);
    }

    static private string GetConnectionStringMethod2(
        string Host,
        string serviceName,
        string userId,
        string password
        )
    {
        string format =
            "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
            "(Host={0})(PORT=1521))" +
            "(CONNECT_DATA=(SERVER=DEDICATED)" +
            "(SERVICE_NAME={1})));" +
            "User Id={2};" +
            "Password={3};"; // assumes port is 1521 (the default)

        return String.Format(format, Host, serviceName, userId, password);
    }
}

Mẹo cuối cùng: Nếu bạn gặp lỗi "System.Data.OracleClient yêu cầu phiên bản phần mềm máy khách Oracle 8.1.7" , xem câu hỏi này .

5
DavidRR

ODAC xcopy sẽ đưa bạn đi với khoảng 45 MB. http://www.Oracle.com/tĩ/software/tech/windows/odpnet/index.html

3
smo

Tôi thấy bài đăng này trên diễn đàn Oracle rất hữu ích:

Cách thiết lập Oracle Instant Client với Visual Studio

Lưu ý: nhóm ADO.NET đang phản đối System.Data.OracleClient vì vậy đối với các dự án trong tương lai, bạn nên sử dụng ODP.NET

Sinh sản:

Thiết lập các biến môi trường sau:

  1. đảm bảo không có thư mục Oracle nào khác trong PATH của bạn
  2. đặt đường dẫn [~ # ~] [~ # ~] để trỏ đến ứng dụng khách tức thời của bạn
  3. đặt TNS_ADMIN của bạn để trỏ đến nơi bạn đặt tệp tnsnames.ora
  4. đặt NLS_LANG
  5. đặt Oracle_HOME cho ứng dụng khách tức thời của bạn

Đối với tôi, tôi đặt NLS_LANG thành

http://doad-east.Oracle.com/docs/html/A95493_01/gblsupp.htmlm#634282

Tôi đã xác minh điều này bằng cách sử dụng phần mềm máy khách chính xác bằng cách sử dụng tiện ích bổ sung sqlplus cho máy khách tức thời.

Đối với tôi, tôi đặt: SET NLS_LANG = AMERICAN_AMERICA.we8MSWIN1252

Lưu ý: trước khi bạn thực hiện bất kỳ thay đổi nào, hãy sao lưu khóa đăng ký Oracle của bạn (nếu tồn tại) và sao lưu chuỗi cho bất kỳ biến môi trường nào.

Đọc ứng dụng khách tức thì của Oracle FAQ tại đây

2
Vincent De Smet