اتصال به پایگاه داده Oracle با استفاده از C#

در این مقاله میخواهیم بین پایگاه داده Oracle و محیط Net. ارتباط برقرار کنیم

اتصال به پایگاه داده Oracle با استفاده از C#

این مقاله درباره ی نحوه ی اتصال به پایگاه داده ی Oracle با استفاده از C# است. همه ی ما میدانیم که Oracle قویترین و بیشترین  مورد استفاده را  برای پایگاه داده های خیلی بزرگ را دارد. در طرف دیگر اگر درباره ی چارچوب.NET  صحبت کنیم Net. یک چارچوب نرم افزار توسعه یافته است که توسط  شرکت مایکروسافت ارائه شده و شامل یک کتابخانه بزرگ  که به نام  (FCL) یا Framework Class Library شناخته میشود و قابلیت همکاری با زبان های برنامه نویسی مختلف را فراهم میکند. 

در این مقاله در مورد اینکه چگونه بین یک پایگاه داده ی Oracle و چارچوب .NET با استفاده از C# ارتباط برقرار کنیم بحث خواهیم کرد. این مقاله بیشتر بر روی توضیح اینکه چگونه ارتباط میتواند برقرار شود و مشکلاتی که ممکن است بوجود بیاید و راه های برطرف کردن آنها تمرکز خواهیم کرد.

پیش نیاز ها

1    برنامه ی مایکروسافت ویژوال استودیو 2008 یا بالاتر (من از 2012 استفاده خواهم کرد).
2    پایگاه داده ی Oracle 9.2 یا بالاتر یا پایگاه داده ی Oracle XE .
3    نصب کامپوننت Oracle Data Access (ODAC)

زمانی که شما ODAC را نصب کردید باید به دنبال فایل های اسمبلی زیر باشید.
Oracle.DataAccess.dll (این فایل اسمبلی مورد نیاز است)
Oracle.ManagedDataAccess.dll (انتخابی)
Oracle.Web.dll (انتخابی)
منابع زیر را بیافزایید :
1   به Solution Explorer بروید.
2    راست کلیک کنید و افزودن مرجع را انتخاب کنید.
3    بر روی Extensions کلیک کنید.
4    فایل های ذکرشده ی بالا را انتخاب کنید و بر روی تایید کلیک کنید.
خوبه , حال مراجع به پروژه اضافه شده اند.
چگونه بفهمم که مراجع به پروژه اضافه شده اند یا خیر ؟ سوال خوبیه !

به فایل Web.Config بروید و میتوانید کد زیر را ببینید :

و همچنین میتوانید نام فولدر را ببینید , bin , که در حال حاضر در Solution Explorer ساخته شده است.
امیدوارم همه چیز تا اینجا خوب بوده باشه !
و حالا بخش اصلی . بله , کد زدن !
ابتدا شما باید با ورودی های TNS آشنا باشید , وگرنه ممکن است با خطاهای زیر روبه رو شوید :
ORA-12154: TNS: could not resolve the connect identifier specified
سر و کله ی این کد زمانی پیدا میشود که کد تنظیمات مخصوص را پیدا نکند. این کاملا گیج کننده و در عین حال تحریک کننده است. بهترین کاری که میتوانید انجام دهید این است که تنظیمات TNS را در خود کد مشخص کنید که از بروز این خطاها جلوگیری شود.
در زیرچگونگی نمونه ی ساخت ورودی های TNS آمده است :

باید جزئیات زیر را قبل از ساخت ورودی های TNS بفهمید :
1    host provider 
این پرسش SQL میتواند به شما در تعیین نام host کمک کند :

SELECT SYS_CONTEXT (‘USERENV’, ‘SERVER_HOST’) FROM DUAL;

2    باید نام سرویس را بدانید. میتوانید آن را در tnsnames.ora بیابید , این به شما اجازه میدهد که شما را به عنوان مثال با شنونده ثبت نام کند.
3    سومی id کاربر و رمز عبور است.
4   فراموش نکنید که فضای نام "using Oracle.DataAccess.Client;" را اضافه کنید

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Oracle.DataAccess.Client;
using System.Data;
 
public partial class _Default : System.Web.UI.Page
{
//creating TNS entries
string oradb = "Data Source=(DESCRIPTION =" +
"(ADDRESS = (PROTOCOL = TCP)(HOST = Your host name)(PORT = 1521))" +
"(CONNECT_DATA =" +
"(SERVER = DEDICATED)" +
"(SERVICE_NAME = XE)));" +
"User Id= your user id;Password=<strong>******</strong>;";
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btn_Click(object sender, EventArgs e)
{
OracleConnection conn = new OracleConnection(oradb);
conn.Open();
Response.Write("Connected to Oracle" + conn.ServerVersion);
// Close and Dispose OracleConnection object
conn.Close();
conn.Dispose();
Response.Write("Disconnected");
}
}


1    OracleConnection() : مقداردهی اولیه ی یک عنوان جدید از OracleConnection .
2    OracleConnection(oradb) : مقداردهی اولیه ی یک عنوان جدید از کلاس OracleConnection با رشته ی ارتباطی مخصوص.
3    OracleCommand() : مقداردهی اولیه ی یک عنوان جدید از OracleCommand .
4    CommandText : get  و set های بیان SQL یا روش ذخیره تا اجرای در برابر پایگاه داده.
5    Connection : get و set های OracleConnection استفاده شده توسط  عنوان OracleComman .
6    OracleDataReader : برای ساخت یک OracleDataReader باید متد ExecuteReader از کلاس OracleCommand را فراخوانی کنید به جای استفاده ی مستقیم از یک سازنده. تغییرات بر نتیجه توسط پردازش دیگری یا زمانی که به صورت ظاهر شده توسط کاربر OracleDataReader خوانده میشود اعمال میشود.