دسته بندی ها
14:36 1399/07/09

ایجاد کانکشن استرینگ داینامیک در WPF (تغییر پایگاه داده و سرور در نرم افزار)

مشخصات سوال کننده :
کاربر : mojtabahakimian     امتیاز کاربر : 155     رتبه کاربر : 10
دسته بندی : WPF سی شارپ Sql Server Entity Framework

به این سوال امتیاز بدهید    2
تعداد بازدید این سوال : 6092
پاسخ دهنده : saedbfd 16:01 1399/07/09

ایجاد Connection String داینامیک در WPF

برای تغییر کانکشن برنامه باید Connection String خودتون رو از حالت ثابت (کانکشنی که در فایل app.config می باشد ثابت است) به حالت داینامیک تغییر بدید.

 

چگونه در WPF کانکشن استرینگ داینامیک ایجاد کنیم ؟

 

ایجاد کانکشن استرینگ داینامیک در wpf

 

خب گاهی اوقات نیاز هست که کانکشن استرینگ برنامه  تغییر کنه. دقت کنید که تغییر کانکشن در برنامه نویسی تحت شبکه انجام میشه معمولا. چون توی شبکه ها ممکنه آی پی سرور یا نام دیتابیس یا رمز دیتابیس مرتبا تغییر کنه و کاربر باید بتونه کانکشن رو تغییر بده تا ارتباطش با دیتابیس برقرار بمونه.

برای ایجاد کانکشن استرینگ داینامیک مراحل زیر رو انجام بدید :

 

  • تعیین رمز عبور برای دیتابیس : دقت کنید که Sql Server شما حتما یک رمز عبور داشته باشد. بدون داشتن رمز عبور قادر به ایجاد کانکشن استرینگ داینامیک نخواهید بود. نحوه ایجاد رمز عبور در این لینک توضیح داده شده.

رمز عبور در sql server

 

  • تعیین محل ذخیره سازی کانکشن استرینگ ایجاد شده : کانکشن استرینگ استاتیک یا ثابت در فایل App.config وجود دارد. اما برای ذخیره کانکشن استرینگ داینامیک هم باید یک محلی وجود داشته باشد. ما در این مثال از رجیستری ویندوز برای نگهداری کانکشن استرینگ داینامیک استفاده می کنیم.
  1. برای این منظور ابتدا از منوی Start ویندوز عبارت Registry را جستجو کنید و رجیستری را باز کنید.
  2. در رجیستری پوشه HKEY_CURRENT_USER را باز کنید. سپس وارد پوشه Software شوید. در این پوشه ما کانکشن استرینگ خود را ذخیره خواهیم کرد. دقت کنید که بهتر است شما هم کانکشن استرینگ را در این پوشه ذخیره کنید. اگر در مسیرهایی غیر از این مسیر ذخیره کنید ممکن است به نرم افزارهای دیگر یا خود ویندوز آسیب وارد کنید.

رجیستری ویندوز

 

  • ایجاد پنجره تعیین پارامترهای ارتباط با سرور : خب حالا یک پنجره جدید در پروژه WPF خود ایجاد کنید. در این پنجره قرار است کانکشن استرینگ را به صورت داینامیک ایجاد کنیم. در واقع هر موقع که نیاز به ایجاد کانکشن استرینگ جدید داشتیم از این پنجره استفاده می کنیم.

ارتباط با سرور

همانطور که ملاحظه می کنید این پنجره دارای 3 ورودی می باشد. از این 3 ورودی برای ایجاد کانکشن استرینگ داینامیک استفاده خواهیم کرد.

 

  • نوشتن دستورات ایجاد Connection String و ذخیره آن در رجیستری : خب روی دکمه "تایید" در پنجره بالا 2 بار کلیک کنید تا متد Click آن ایجاد شود. کدهای زیر را در آن بنویسید. در این کدها "نام دیتابیس"، "آی پی دیتابیس" و رمز عبور دیتابیس از شما خواسته میشود. پس از وارد کردن آنها کانکشن استرینگ شما در مسیری که در رجیستری تعیین کردیم ساخته خواهید شد.

 

private void btn_ok_Click(object sender, RoutedEventArgs e)
   {
       var entityConnectionString = BuildEntityConnection("Data Source="  + txt_serverip.Text.Trim() +  "; Initial Catalog=" + txt_dbname.Text.Trim()
                    +  "; user Id=sa;Password="  + txt_password.Password + ";Integrated Security=false");
            try
            {
                RegistryKey connectionKey = Registry.CurrentUser.CreateSubKey("SOFTWARE\\foroosh");
                //Site : AspCore.Ir
                try
                {
            connectionKey.SetValue("CreateConnection",entityConnectionString);
                }
                catch
                {
                    MessageBox.Show("در ارتباط با سرور اشکالی بوجود آمده است");
                }
                finally
                {
                    connectionKey.Close();
                }
                MessageBox.Show("ارتباط با سرور برقرار شد");
                this.Close();
            }
            catch
            {
                MessageBox.Show("در ارتباط با سرور اشکالی بوجود آمده است");
            }
            finally
            {

            }
        }

 

نکته : دقت کنید که مسیری که در رجیستری کانکشن استرینگ در آن ساخته می شود مسیر زیر می باشد:

HKEY_CURRENT_USER --> Software --> foroosh

نکته : در کدهای بالا یک Key به نام CreateConnection ایجاد کرده ایم که کانکشن استرینگ را در این کلید در رجیستری ذخیره می کنیم.

نکته : شما می توانید برای امنیت بهتر متغیر entityConnectionString که حاوی رشته اتصال شما می باشد را رمزنگاری کنید.

در حال حاضر بعد از اجرای کدهای بالا باید کانکشن استرینگ شما در رجیستری ساخته شده باشد. تصویر زیر را ملاحظه کنید :

ایجاد کانکشن استرینگ داینامیک

 

  • حذف Connection String از فایل App.config :  کانکشن استرینگ ثابت را از فایل App.config حذف کنید. چون نیازی به آن نخواهیم داشت. برای این منظور تگ Connection String را در این فایل حذف کنید.
  • استفاده از پنجره تغییر کانکشن استرینگ داینامیک : خب ما پنجره ای را برای ایجاد کانکشن استرینگ داینامیک و ذخیره آن در رجیستری ویندوز ایجاد کردیم. حال بایستی قبل از اینکه پروژه اجرا شود و قبل از اینکه ارتباطی با دیتابیس برقرار شود از این پنجره استفاده کنیم. به عنوان مثال می توانیم در قسمت پنجره لاگین این کار را انجام دهیم. همانطور که در تصویر زیر ملاحظه می کنید کاربران موقع لاگین می توانند پارامترهای ارتباط با سرور را تنظیم کنند. (البته شما به عنوان ادمین میتوانید این گزینه را مخفی کنید یا دسترسی آن را به افراد خاصی دهید تا همه نتوانند تنظیمات کانکشن استرینگ را دستکاری کنند)

فرم لاگین حرفه ای

 

  • استفاده از کانکشن استرینگ داینامیک ایجاد شده : اما حالا باید بتوانیم از این Connection String ایجاد شده استفاده کنیم. ابتدا در مدل داده ای خود در انتیتی فریم ورک باید تغییراتی ایجاد کنید. مدل داده ای خود را باز کنید. کلاس DbContext را باز کنید:

DbContext

 

در کلاس DbContext یک سازنده یا Constructor وجود دارد که در ابتدا به صورت زیر می باشد :

 

public forooshEntities()
       : base("forooshentities")
{

 در این کلاس نام کانکشن استاتیک یا ثابت نوشته شده است. ما باید این سازنده را به صورت زیر تغییر دهیم :

 

public forooshEntities(string connectionString)
      : base(connectionString)
{

 

همانطور که می بینید یک پارامتر ورودی به نام connectionString در ورودی این سازنده تعریف کردیم. به این ترتیب هر موقع که قرار است با دیتابیس ارتباط برقرار شود باید این متغیر به صورت داینامیک به مدل داده ای ارسال شود.

  • نحوه دریافت Connection String و ذخیره آن : ما باید کانکشن استرینگ را در سرتاسر نرم افزار داشته باشیم تا هر جا نیاز شد از آن استفاده کنیم. بنابراین یک کلاس به نام PublicVariable ایجاد می کنیم. در این کلاس یک متغیر static و public به نام ConnectionString تعریف می کنیم. از این متغیر در سرتاسر برنامه برای دریافت ConnectionString استفاده می کنیم.
public static class PublicVariable
{
   public static string ConnectionString = "";
}

 

  • دریافت رشته اتصال از رجیستری و ذخیره در متغیر ConnectionString : خب حالا باید رشته اتصال را در متغیر سراسری ConnectionString که در بالا ایجاد کردیم ذخیره کنیم تا بتوانیم در همه جا از آن استفاده کنیم. خب با توجه به این فرم لاگین اولین فرمی هست که در نرم افزار نمایش داده میشه میتونیم در متد Load این فرم این کار رو انجام بدیم.
private void Window_Loaded(object sender, RoutedEventArgs e)
{   
    string RegisterConnectionString = "";
    RegistryKey ConnectionKey = Registry.CurrentUser.CreateSubKey("SOFTWARE\\foroosh");
    RegisterConnectionString =(string) ConnectionKey.GetValue("CreateConnection");
    PublicVariable.ConnectionString = RegisterConnectionString;
}

 

  • تعریف شی دیتابیس در پروژه : خب حالا برای استفاده از مدل داده ای و در واقع استفاده از دیتابیس کافیست یک نمونه از مدل داده ای تعریف کنیم :
forooshEntities database = new forooshEntities(PublicVariable.ConnectionString);

در اینجا شی database حاوی دیتابیس و جداول ما می باشد. به این ترتیب شما کانکشن استرینگ رو داینامیک کردید و میتونید با تغییر آی پی سرور یا رمز دیتابیس یا حتی نام دیتابیس بدون نیاز به تغییر در سورس اصلی پروژه کانکشن استرینگ رو تغییر بدید.

 

ایجاد Connection String داینامیک در WP

ویرایش شده در پنج شنبه 6 مرداد 1401 ساعت 21:59:24
به این پاسخ امتیاز بدهید    2
امتیاز: 1654 رتبه: 1
1 نظر
mojtabahakimian : سپاس گزارم

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 01:04 1399/07/11
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود