سلام
من پروژه ای با سی شارپ و Sqlserver نوشته ام که با entity framework کار میکنه و به صورت database model انتیتی را به بانکم متصل کردم .یعنی code first نیست.
حالا میخوام کاربر به صورت پویا کانکشن استرینگ را تغییر بده که برنامه ام روی همه سیستم ها کار کنه ومتناسب به اون سیستم به بانک وصل بشه.اما نمیدونم چه کار کنم لطفا میشه راهنماییم کنید ؟ ممنونم
public void DoImportWork() { var ctx = new StatisticsContext(); << your DbContext ctx.Database.Connection.ConnectionString = @"Data Source=localhost\SQLEXP;AttachDbFilename=""C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXP\MSSQL\DATA\StatisticsData.mdf"";Integrated Security=True"; ctx.Database.Connection.Open(); }
سلام.ممنون بابت پاسختون
این کار را که انجام دادیم چطوری این تغییر connection را save کنم که برای اجرای بعدی ذخیره بمونه ؟
میشه کاری کرد که connection string در app.config را تغییر داد که این تنظیمات جدید جای تنظیمات قبلی را بگیرند ؟
بله میشه
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings"); connectionStringsSection.ConnectionStrings["Blah"].ConnectionString = "Data Source=blah;Initial Catalog=blah;UID=blah;password=blah"; config.Save(); ConfigurationManager.RefreshSection("connectionStrings");
وقتی از این کد استفاده کردم
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings"); connectionStringsSection.ConnectionStrings["Blah"].ConnectionString = "Data Source=blah;Initial Catalog=blah;UID=blah;password=blah"; config.Save(); ConfigurationManager.RefreshSection("connectionStrings");
خطای زیر رو بهم میده
An unhandled exception of type 'System.Data.Entity.Core.EntityException' occurred in EntityFramework.SqlServer.dll
این ارور به رشته اتصال مربوط نمیشه
Entity را Update کنید شاید درست شد
در حالتیکه connection رو run time تغییر میدم این خطا رو میده.
با connection ی که تو app.config وجود داره برنامه اجرا میشه.
با EntityConnectionStringBuilder هم تست کردم همین خطا رو گرفتم.
اما با این کد درست کار میکنه
public void DoImportWork() { var ctx = new StatisticsContext(); << your DbContext ctx.Database.Connection.ConnectionString = @"Data Source=localhost\SQLEXP;AttachDbFilename=""C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXP\MSSQL\DATA\StatisticsData.mdf"";Integrated Security=True"; ctx.Database.Connection.Open(); }
دیتابیس آپدیت هست . ممنون میشم راهنمایی کنید
سلام
آقا مدائنی میشه لطفا یه سورس کوچیک برای این سوال بنده و دوستان آماده کنید و در سایت قرار بدید.
خود من هم نتونستم اون چیزی که میخواستم را ایجاد کنم.
متاسفانه من واقعا وقت آزاد ندارم
در اولین فرصت خالی حتما درست خواهم کرد
روشهایی که گفته شد اصلا روشهای اصولی و حرفه ای نیستن و یا اینکه به راحتی میشه به دیتابیس برنامه دسترسی پیدا کرد،در نتیجه یک روش امن و مطمئن به حساب نمیاد.
خیلی در این مورد تحقیق کردم و بعد از کلی تحقیق خوشبختانه به مطلوب ترین روش و یا بهتر بگم استانداردی ترین روش دست پیدا کردم،
اگر چنانچه شخصی از شما با این مشکل مواجه هستید میتونم کمکتون کنم،ولی از همگی خواهش میکنم دنبال موفقیتی نباشید که مفت به دست بیاد،
این شمار بنده هستش : 09358350348
با تشکر از همه ی شما دوستان برنامه نویس...
سلام خدمت دوستان گرامی این کدی که مهندس گذاشتن کجا باید بذاریم؟؟
باسلام و وقت بخیر
من از این روش استفاده میکنم و کسی هم از بیرون به رشته اتصال دسترسی نخواهد داشت.
خواستم با بقیه دوستان هم به اشتراک بگذارم :
ابتدا این بخش از رشته اتصال در app رو parametric کنید به شکل زیر :
provider connection string=&amp;quot;data source=server;initial catalog=dbase;user id=uid;password=XXX;
سپس در Constructor خود DBContext این قسمت رو اضافه کنید :
درواقع شما با یک StreamReader از یک TextFile پارامترهای رشته رو میخوانید و جایگزین میکنین اما نکته اینکه باید عنوانهای داخل TextFile شما رمزنگاری شده باشه که من با یک کلاس Cryptor که خودم نوشتم این کار رو انجام دادم و اینجا با Decrypt از رمز خارج کردم و داخل رشته اتصال جایگزین کردم.
امیدوارم مفید بوده باشه براتون
موفق باشید.
public YourDbContext()
: base("name=YourDbContext")
{
System.IO.StreamReader sr = new System.IO.StreamReader(System.Windows.Forms.Application.StartupPath + @"\serverParameter.txt");
string Server_Name = sr.ReadLine();
string Catalog = sr.ReadLine();
string Us = Utility.Cryptor.Decrypt(sr.ReadLine(), "");
string Pass = Utility.Cryptor.Decrypt(sr.ReadLine(), "");
sr.Close();
Database.Connection.ConnectionString = Database.Connection.ConnectionString.Replace("server", Server_Name);
Database.Connection.ConnectionString = Database.Connection.ConnectionString.Replace("dbase", Catalog);
Database.Connection.ConnectionString = Database.Connection.ConnectionString.Replace("uid", Us);
Database.Connection.ConnectionString = Database.Connection.ConnectionString.Replace("XXX", Pass);
}
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)