Solusi terbaik yang saya temukan adalah menggunakan perpustakaan Oracle Data Access Client, dan menyertakan seluruh entri nama TNS dalam string koneksi. Ini memungkinkan proyek untuk dipublikasikan dengan mudah ke server web, ClickOnce, dll.
Berikut adalah langkah-langkah yang diperlukan untuk menyiapkan driver Oracle yang berfungsi di proyek Anda:
1) Dapatkan DLL dari paket 'Penyedia Data Oracle untuk .NET'
Unduh file penginstal dari lokasi ini:http://www.Oracle. com/technetwork/topics/dotnet/index-085163.html
Saya melanjutkan dan menginstal ODAC 200 MB penuh dengan Oracle Developer Tools untuk Visual Studio, tetapi Anda hanya benar-benar membutuhkan empat DLL dari unduhan ini. (Anda mungkin dapat mengekstraknya langsung dari paket penginstal, alih-alih melalui seluruh proses penginstalan, atau mungkin salah satu unduhan yang lebih kecil menyertakan semuanya.)
2) Referensi DLL dalam proyek Anda
Cari direktori instalasi Oracle Data Access Client dan seret empat DLL berikut ke root proyek Anda:
- Oracle.DataAccess.dll
- oci.dll
- oraciicus11.dll
- OraOps11w.dll
Setel Salin ke Direktori Keluaran properti semua file kecuali Oracle.DataAccess.dll ke Salin selalu .
Di bawah Proyek --> Tambahkan Referensi... , klik Jelajahi tab dan pilih file Oracle.DataAccess.dll.
3) Gunakan driver dengan string koneksi penuh (opsional)
Agar tidak perlu khawatir tentang file nama TNS yang diatur pada mesin tempat aplikasi digunakan, saya meletakkan seluruh definisi dalam file seperti yang ditunjukkan oleh connectionstrings.com . Itu membuat string koneksi sedikit besar, tetapi menghapus banyak sakit kepala file TNS Names yang saya alami sebelumnya:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=servername)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=username;Password=********;
Inilah kelas lengkap yang saya gunakan untuk menguji driver:
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.");
}
}
}
}