ایجاد کانکشن استرینگ داینامیک در WPF (تغییر پایگاه داده و سرور در نرم افزار)
با سلام و احترام خدمت مهندسان عزیز
من یک پروژه WPF دارم که اطلاعات رو در دیتابیس ذخیره میکنه
الان مشکلی که دارم اینه که میخوام نرم افزار رو تحت شبکه استفاده کنم بنابراین قبل از لود نرم افزار باید به سرور و دیتایس نرم افزارم وصل بشم.
میخوام یه فرمی مثل ↓ این که کاربر نام سرور و دیتابیس رو حالا یا از طریق Windows Authenticatin یا SQL Authentication
انتخاب کنه و وصل سرور بشه و از نرم افزار استفاده کنه.
حالا چطور باید اطلاعات این فرم رو جایگزین (نام سرور و دیتابیس) جایگزینه Connection String که توی App.config هست بکنم
ممنونم میشم راهنمایی کنید.
ایجاد Connection String داینامیک در WPF
برای تغییر کانکشن برنامه باید Connection String خودتون رو از حالت ثابت (کانکشنی که در فایل app.config می باشد ثابت است) به حالت داینامیک تغییر بدید.
چگونه در WPF کانکشن استرینگ داینامیک ایجاد کنیم ؟
خب گاهی اوقات نیاز هست که کانکشن استرینگ برنامه تغییر کنه. دقت کنید که تغییر کانکشن در برنامه نویسی تحت شبکه انجام میشه معمولا. چون توی شبکه ها ممکنه آی پی سرور یا نام دیتابیس یا رمز دیتابیس مرتبا تغییر کنه و کاربر باید بتونه کانکشن رو تغییر بده تا ارتباطش با دیتابیس برقرار بمونه.
برای ایجاد کانکشن استرینگ داینامیک مراحل زیر رو انجام بدید :
- تعیین رمز عبور برای دیتابیس : دقت کنید که Sql Server شما حتما یک رمز عبور داشته باشد. بدون داشتن رمز عبور قادر به ایجاد کانکشن استرینگ داینامیک نخواهید بود. نحوه ایجاد رمز عبور در این لینک توضیح داده شده.
- تعیین محل ذخیره سازی کانکشن استرینگ ایجاد شده : کانکشن استرینگ استاتیک یا ثابت در فایل App.config وجود دارد. اما برای ذخیره کانکشن استرینگ داینامیک هم باید یک محلی وجود داشته باشد. ما در این مثال از رجیستری ویندوز برای نگهداری کانکشن استرینگ داینامیک استفاده می کنیم.
- برای این منظور ابتدا از منوی Start ویندوز عبارت Registry را جستجو کنید و رجیستری را باز کنید.
- در رجیستری پوشه 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 یک سازنده یا 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
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- حذف کامل یک رکورد در جدول ریلیشن شده
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- مقایسه ساختار دو دیتابیس در Sql Server
- اشکال در ایجاد کلید خارجی در Sql Server
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf