مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

davood2016

عضویت از 1395/10/11

تغییر Connection String (رشته اتصالی) Entity Framework به بانک اطلاعاتی در زمان اجرا

  • شنبه 11 دی 1395
  • 21:19
تشکر میکنم

سلام

من پروژه ای با  سی شارپ و Sqlserver نوشته ام که با entity framework کار میکنه و به صورت database model انتیتی را به بانکم متصل کردم .یعنی code first نیست.
حالا میخوام کاربر به صورت پویا کانکشن استرینگ را تغییر بده که برنامه ام روی همه سیستم ها کار کنه ومتناسب به اون سیستم به بانک وصل بشه.اما نمیدونم چه کار کنم لطفا میشه راهنماییم کنید ؟ ممنونم

پاسخ های این پرسش

تعداد پاسخ ها : 11 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 12 دی 1395
  • 09:21
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();
}

کاربر سایت

davood2016

عضویت از 1395/10/11

  • یکشنبه 12 دی 1395
  • 20:23

سلام.ممنون بابت پاسختون

این کار را که انجام دادیم چطوری این تغییر connection را save کنم که برای اجرای بعدی ذخیره بمونه ؟

میشه کاری کرد که connection string در app.config را تغییر داد که این تنظیمات جدید جای تنظیمات قبلی را بگیرند ؟

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 13 دی 1395
  • 08:18

بله میشه

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");

کاربر سایت

avzin_62@yahoo.com

عضویت از 1395/11/19

  • سه شنبه 2 خرداد 1396
  • 14:18

وقتی از این کد استفاده کردم

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

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • سه شنبه 2 خرداد 1396
  • 18:06

این ارور به رشته اتصال مربوط نمیشه

Entity را Update کنید شاید درست شد

کاربر سایت

avzin_62@yahoo.com

عضویت از 1395/11/19

  • چهارشنبه 3 خرداد 1396
  • 08:45

در حالتیکه 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();
}

دیتابیس آپدیت هست . ممنون میشم راهنمایی کنید

کاربر سایت

davood2016

عضویت از 1395/10/11

  • چهارشنبه 3 خرداد 1396
  • 18:30

سلام

آقا مدائنی میشه لطفا یه سورس کوچیک برای این سوال بنده و دوستان آماده کنید و در سایت قرار بدید.

خود من هم نتونستم اون چیزی که میخواستم را ایجاد کنم.

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • چهارشنبه 3 خرداد 1396
  • 19:25

متاسفانه من واقعا وقت آزاد ندارم

در اولین فرصت خالی حتما درست خواهم کرد

کاربر سایت

seven7

عضویت از 1393/12/07

  • یکشنبه 7 خرداد 1396
  • 15:57

روشهایی که گفته شد اصلا روشهای اصولی و حرفه ای نیستن و یا اینکه به راحتی میشه به دیتابیس برنامه دسترسی پیدا کرد،در نتیجه یک روش امن و مطمئن به حساب نمیاد.

خیلی در این مورد تحقیق کردم و بعد از کلی تحقیق خوشبختانه به مطلوب ترین روش و یا بهتر بگم استانداردی ترین روش دست پیدا کردم،

اگر چنانچه شخصی از شما با این مشکل مواجه هستید میتونم کمکتون کنم،ولی از همگی خواهش میکنم دنبال موفقیتی نباشید که مفت به دست بیاد،

این شمار بنده هستش : 09358350348

با تشکر از همه ی شما دوستان برنامه نویس...

کاربر سایت

m_b_sha

عضویت از 1398/04/30

  • یکشنبه 30 تیر 1398
  • 21:47

سلام خدمت دوستان گرامی این کدی که مهندس گذاشتن کجا باید بذاریم؟؟

کاربر سایت

Behnamico

عضویت از 1399/12/12

  • سه شنبه 9 شهریور 1400
  • 11:24

باسلام و وقت بخیر
من از این روش استفاده میکنم و کسی هم از بیرون به رشته اتصال دسترسی نخواهد داشت. 
خواستم با بقیه دوستان هم به اشتراک بگذارم :

ابتدا این بخش از رشته اتصال در app  رو parametric کنید به شکل زیر :

provider connection string=&amp;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);
        }
&nbsp;
کاربرانی که از این پست تشکر کرده اند nebez

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)