Kết nối cơ sở dữ liệu Oracle trong C# không cần Oracle Client
2. Tổng quan về kết nối từ C# vào Oracle
Trước hết bạn cần phải hiểu cơ chế kết nối từ một chương trình C# vào Database Oracle.
Mô hình 1:
Trong mô hình này, trên máy tính chạy ứng dụng C# bạn phải cài đặt Oracle Client, đây là một phần của Oracle được đặt tại client để hỗ trợ kết nối tới database Oracle chính. Nếu database Oracle được cài đặt cùng vào một máy tính chạy ứng dụng C# của bạn thì bạn không cần phải cài đặt Oracle Client bởi vì database Oracle tự nó đã là Oracle Client. Dung lượng của Oracle Client vào khoảng 50MB.
Mô hình 2:
Mô hình 2 cho phép bạn kết nối trực tiếp vào Oracle, mà không cần phải cài đặt Oracle Client trên máy tính chạy ứng dụng C#. Bạn cần phải copy một vài thư viện DLL của Oracle client, và một vài thư viện ODAC XCopy vào project.
Và vì không sử dụng Oracle Client, nên không có file tnsname.ora chứa thông tin của database Oracle, vì vậy Connection String cần phải chứa các thông số của database giống như nội dung của file tnsname.ora.
Và vì không sử dụng Oracle Client, nên không có file tnsname.ora chứa thông tin của database Oracle, vì vậy Connection String cần phải chứa các thông số của database giống như nội dung của file tnsname.ora.
// Connection String kết nối trực tiếp tới Oracle.
string connString = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = "
+ host + ")(PORT = " + port + "))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = "
+ sid + ")));Password=" + password + ";User ID=" + user;
3. Download thư viện
64-bit
32-bit
Kết quả bạn download được:
Chú ý: Bạn có thể sử dụng phiên bản 32bit vừa download được để sử dụng (Kể cả hệ điều hành của bạn đang sử dụng là 64bit), nếu sử dụng phiên bản 64bit đôi khi sử dụng C# kết nối vào Oracle bạn nhận được một lỗi sau:An unhandled exception of type 'System.BadImageFormatException' occurred in mscorlib.dll Additional information: Could not load file or assembly 'Oracle.DataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load a program with an incorrect format.
Mặc dù máy tính của tôi là hệ điều hành 64bit, nhưng tôi sẽ sử dụng ODAC 32bit vừa download được ở bước trên.
4. Copy các thư viện vào Project
Tôi tạo một project có tên ConnectOracleWithoutClient:
Project đã được tạo ra.
Giải nén file zip bạn đã download được trước đó.
Copy Các file sau:
Directory | File Copy |
<DIR>/instantclient_12_1 | oci.dll |
<DIR>/instantclient_12_1 | orannzsbb12.dll |
<DIR>/instantclient_12_1 | oraocci12.dll |
<DIR>/instantclient_12_1 | oraocci12d.dll |
<DIR>/instantclient_12_1 | oraociei12.dll |
<DIR>/instantclient_12_1 | oraons.dll |
<DIR>/odp.net4/odp.net/bin/4 | Oracle.DataAccess.dll |
<DIR>/oramts/bin | oramts.dll |
<DIR>/oramts/bin | oramts12.dll |
<DIR>/oramts/bin | oramtsus.dll |
<DIR>/odp.net4/bin | OraOps12.dll |
Copy và Paste các file trên trực tiếp vào project của bạn trên Visual Studio:
Trên Visual Studio, chọn các file DLL và thiết lập thuộc tính cho chúng:
- Copy to Output Directory: Copy if newer
Khai báo thư viện, tham chiếu tới Oracle.DataAccess.dll.
5. Kiểm tra Kết nối
Class DBOracleUtils có một phương thức tiện ích để kết nối trực tiếp vào Oracle.
DBOracleUtils.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oracle.DataAccess.Client;
namespace Tutorial.SqlConn
{
class DBOracleUtils
{
public static OracleConnection
GetDBConnection(string host, int port, String sid, String user, String password)
{
Console.WriteLine("Getting Connection ...");
// 'Connection String' kết nối trực tiếp tới Oracle.
string connString = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = "
+ host + ")(PORT = " + port + "))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = "
+ sid + ")));Password=" + password + ";User ID=" + user;
OracleConnection conn = new OracleConnection();
conn.ConnectionString = connString;
return conn;
}
}
}
Một class tiện ích với các thông số kết nối vào cơ sở dữ liệu Oracle của bạn:
DBUtils.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oracle.DataAccess.Client;
namespace Tutorial.SqlConn
{
class DBUtils
{
public static OracleConnection GetDBConnection()
{
string host = "192.168.205.1";
int port = 1521;
string sid = "db12c";
string user = "simplehr";
string password = "12345";
return DBOracleUtils.GetDBConnection(host, port, sid, user, password);
}
}
}
Test Oracle Connection:
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oracle.DataAccess.Client;
using Tutorial.SqlConn;
namespace ConnectOracleWithoutClient
{
static class Program
{
static void Main(string[] args)
{
//
OracleConnection conn = DBUtils.GetDBConnection();
Console.WriteLine("Get Connection: " + conn);
try
{
conn.Open();
Console.WriteLine(conn.ConnectionString, "Successful Connection");
}
catch (Exception ex)
{
Console.WriteLine("## ERROR: " + ex.Message);
Console.Read();
return;
}
Console.WriteLine("Connection successful!");
Console.Read();
}
}
}
Chạy ứng dụng:
Các hướng dẫn lập trình C#
- Thừa kế và đa hình trong C#
- Bắt đầu với C# cần những gì?
- Học nhanh C# cho người mới bắt đầu
- Cài đặt Visual Studio 2013 trên Windows
- Abstract class và Interface trong C#
- Cài đặt Visual Studio 2015 trên Windows
- Nén và giải nén trong C#
- Hướng dẫn lập trình đa luồng trong C#
- Hướng dẫn và ví dụ C# Delegate và Event
- Cài đặt AnkhSVN trên Windows
- Lập trình C# theo nhóm sử dụng Visual Studio và SVN
- Cài đặt .Net Framework
- Access Modifier trong C#
- Hướng dẫn và ví dụ C# String và StringBuilder
- Hướng dẫn và ví dụ C# Property
- Hướng dẫn và ví dụ C# Enum
- Hướng dẫn và ví dụ C# Structure
- Hướng dẫn và ví dụ C# Generics
- Hướng dẫn xử lý ngoại lệ trong C#
- Hướng dẫn và ví dụ Date Time trong C#
- Thao tác với tập tin và thư mục trong C#
- Hướng dẫn sử dụng Stream - luồng vào ra nhị phân trong C#
- Hướng dẫn sử dụng biểu thức chính quy trong C#
- Kết nối cơ sở dữ liệu SQL Server trong C#
- Làm việc với cơ sở dữ liệu SQL Server trong C#
- Kết nối cơ sở dữ liệu MySQL trong C#
- Làm việc với cơ sở dữ liệu MySQL trong C#
- Kết nối cơ sở dữ liệu Oracle trong C# không cần Oracle Client
- Làm việc với cơ sở dữ liệu Oracle trong C#
Show More