PDA

View Full Version : تعریف متغیر ها بصورت متغیر



marzban
دوشنبه 08 مرداد 1386, 18:38 عصر
با سلام
من چند بار متن سوالم را نوشتم و پاک کردم چون خوانایی چندانی نداشت در نهایت بصورت عامیانه به این صورت مطرح می کنم

من یک کلاس دارم که تمام مقادیر خودش رو بصورت ورودی می گیره حالا برای مثال نام جدول بانک اطلاعات،فیلد کلید،کلیه فیلد های جدول و مقادیری که باید بصورت رکورد ذخیره بشوند.
کلاس هم کاملا جواب می دهد.
حال من به فکرم رسید که بجای اینکه متغیر هایی که با بانک اطلاعاتی در ارتباط هستند را بصورت صریح تعریف کنم ،از تعریف متغیر استفاده کنم.
برای مثال ورودی را اگر OleDb استفاده کردم از متغیر OleDb استفاده کند و اگر SqlDb انتخاب شد از متغیر Sql استفاده کند.
برای مثال


my class name space
dim con as new oledb.oledbconnection


حال مثلا از متغیر استفاده شود بصورت زیر


my class name space(byval connection_type)
dim con as new connection_type


که مقدار connection_type را از یک تابع دیگر به آن پاس می کند.مقادیرش هم oledbconnection و یا sqldbconnection باشد.
چنین کاری را چگونه باید انجام بدم
با تشکر مرزبان

اَرژنگ
سه شنبه 09 مرداد 1386, 17:08 عصر
در برنامه نویسی شئیگرا از یک کلاس داتابیس دو نوع مختلف ارث ببرید، یکیش برایه اس‌کیو‌ال و دیگری برایه اُله‌ای‌دی‌بی . اگرچه میتوانید برایه اکسس و اراکل و هر داتابیس دیگری هم ارث ببرید.
Microsoft Enterprise Library در قسمت داتابیس روشهایه تمیزتری دارد.
لطفا از استفاده از متغییرات برایه اینکار بپرهیزید، روشهایه استاندارد برایه حل این مشکل وجود دارند از (استفاده از ارث بری و استفاده از اینترفیسهایه مختلف جزوشان میباشند).
اگر دارید سعی میکنید که برنامه‌ای بنویسید که هم با اکسس و هم با اس‌اکیو‌ال کار کند ، ححتما از روشهایه ۳ لایه استفاده کنید وگرنه بیشتر از نفع ضرر میکنید.

Behrouz_Rad
سه شنبه 09 مرداد 1386, 18:29 عصر
در حقیقت کاری که میخوای انجام بدی، ایجاد یک Custom Provider هست که برای اینکار در دات نت از Interface ها استفاده میشه.
روش تمیز این کار بدین گونه است که یک متد عمومی برای تمامی Provider ها تعریف می کنی و برای استفاده از این متد، Provider مخصوص خودش رو فراخوانی میکنی.
در ذیل، یک تکه کد ساده برای بازیابی داده ها از جدول myTable که با استفاده از Interface ها پیاده سازی شده میبینی:


private void GetData(IDbConnection Cnn, IDbDataAdapter DA)
{
IDbCommand Cmd = Cnn.CreateCommand();
Cmd.CommandText = "SELECT * FROM myTable";
DA.SelectCommand = Cmd;
DataSet DS = new DataSet();
DA.Fill(DS, "myTable");
GridView.DataSource = DS.Tables["myTable"].DefaultView;
GridView.DataBind();
}

در روال فوق نوع Provider مشخص نشده.
فرض کن که من قصد دارم از روال فوق برای بازیابی داده ها از یک دیتابیس SQL Server استفاده کنم.
به شکل زیر عمل میکنم:


SqlConnection Cnn = new SqlConnection("myConnectionString");
SqlDataAdapter DA = new SqlDataAdapter();
GetData(Cnn, DA);

و یا برای اتصال به یک دیتابیس از نوع OLEDB:


OleDbConnection Cnn = new OleDbConnection("myConnectionString");
OleDbDataAdapter DA = new OleDbDataAdapter();
GetData(Cnn, DA);

پس دیدی که این کار با استفاده از Interface ها در دات نت به راحتی امکان پذیر هست.

موفق باشید.

marzban
سه شنبه 09 مرداد 1386, 19:38 عصر
استاد راد عزیز،خیلی عالی و مفید توضیح داده بودید ممنون