Giải pháp tốt nhất mà tôi tìm thấy là sử dụng thư viện Máy khách truy cập dữ liệu Oracle và bao gồm toàn bộ mục nhập tên TNS trong chuỗi kết nối. Điều này cho phép dễ dàng xuất bản dự án lên máy chủ web, ClickOnce, v.v.
Dưới đây là các bước cần thiết để thiết lập trình điều khiển Oracle hoạt động trong dự án của bạn:
1) Nhận DLL từ gói 'Nhà cung cấp dữ liệu Oracle cho .NET'
Tải xuống tệp trình cài đặt từ vị trí này: http://www.oracle. com / technetwork / themes / dotnet / index-085163.html
Tôi đã tiếp tục và cài đặt 200 MB ODAC đầy đủ với Công cụ nhà phát triển Oracle cho Visual Studio, nhưng bạn chỉ thực sự cần bốn DLL từ bản tải xuống này. (Bạn có thể giải nén chúng trực tiếp từ gói trình cài đặt, thay vì thực hiện toàn bộ quá trình cài đặt hoặc có thể một trong những bản tải xuống nhỏ hơn bao gồm tất cả chúng.)
2) Tham chiếu DLL trong dự án của bạn
Tìm kiếm thư mục cài đặt của Oracle Data Access Client và kéo bốn DLL sau vào thư mục gốc của dự án của bạn:
- Oracle.DataAccess.dll
- oci.dll
- oraciicus11.dll
- OraOps11w.dll
Đặt Sao chép vào Thư mục đầu ra thuộc tính tất cả các tệp ngoại trừ Oracle.DataAccess.dll thành Sao chép luôn .
Trong Dự án -> Thêm Tham chiếu ... , nhấp vào nút Duyệt qua và chọn tệp Oracle.DataAccess.dll.
3) Sử dụng trình điều khiển với chuỗi kết nối đầy đủ (tùy chọn)
Để không phải lo lắng về việc các tệp tên TNS được thiết lập trên các máy mà ứng dụng được triển khai, tôi đặt toàn bộ định nghĩa trong tệp như được hiển thị bởi connectionstrings.com . Nó làm cho chuỗi kết nối hơi cồng kềnh, nhưng đã loại bỏ rất nhiều vấn đề đau đầu về tệp TNS Names mà tôi đã gặp phải trước đây:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=servername)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=username;Password=********;
Đây là toàn bộ lớp tôi đã sử dụng để kiểm tra trình điều khiển:
using System;
using System.Data;
using Oracle.DataAccess.Client;
static class Program
{
[STAThread]
static void Main()
{
TestOracle();
}
private static void TestOracle()
{
string connString =
"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)" +
"(HOST=servername)(PORT=1521)))" +
"(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));"+
"User Id=username;Password=********;";
using (OracleConnection conn = new OracleConnection(connString))
{
string sqlSelect = "SELECT * FROM TEST_TABLE";
using (OracleDataAdapter da = new OracleDataAdapter(sqlSelect, conn))
{
var table = new DataTable();
da.Fill(table);
if (table.Rows.Count > 1)
Console.WriteLine("Successfully read oracle.");
}
}
}
}