نمایش نتایج 1 تا 4 از 4

نام تاپیک: تعریف متغیر ها بصورت متغیر

  1. #1

    تعریف متغیر ها بصورت متغیر

    با سلام
    من چند بار متن سوالم را نوشتم و پاک کردم چون خوانایی چندانی نداشت در نهایت بصورت عامیانه به این صورت مطرح می کنم

    من یک کلاس دارم که تمام مقادیر خودش رو بصورت ورودی می گیره حالا برای مثال نام جدول بانک اطلاعات،فیلد کلید،کلیه فیلد های جدول و مقادیری که باید بصورت رکورد ذخیره بشوند.
    کلاس هم کاملا جواب می دهد.
    حال من به فکرم رسید که بجای اینکه متغیر هایی که با بانک اطلاعاتی در ارتباط هستند را بصورت صریح تعریف کنم ،از تعریف متغیر استفاده کنم.
    برای مثال ورودی را اگر 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 باشد.
    چنین کاری را چگونه باید انجام بدم
    با تشکر مرزبان

  2. #2
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    در برنامه نویسی شئیگرا از یک کلاس داتابیس دو نوع مختلف ارث ببرید، یکیش برایه اس‌کیو‌ال و دیگری برایه اُله‌ای‌دی‌بی . اگرچه میتوانید برایه اکسس و اراکل و هر داتابیس دیگری هم ارث ببرید.
    Microsoft Enterprise Library در قسمت داتابیس روشهایه تمیزتری دارد.
    لطفا از استفاده از متغییرات برایه اینکار بپرهیزید، روشهایه استاندارد برایه حل این مشکل وجود دارند از (استفاده از ارث بری و استفاده از اینترفیسهایه مختلف جزوشان میباشند).
    اگر دارید سعی میکنید که برنامه‌ای بنویسید که هم با اکسس و هم با اس‌اکیو‌ال کار کند ، ححتما از روشهایه ۳ لایه استفاده کنید وگرنه بیشتر از نفع ضرر میکنید.

  3. #3
    در حقیقت کاری که میخوای انجام بدی، ایجاد یک 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 ها در دات نت به راحتی امکان پذیر هست.

    موفق باشید.

  4. #4
    استاد راد عزیز،خیلی عالی و مفید توضیح داده بودید ممنون

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •