PDA

View Full Version : حرفه ای: طریقه استفاده از Properties.Settings در app.config



davidrobert
شنبه 10 مرداد 1394, 15:18 عصر
سلام دوستان میخوام تو app.config برای ادرس دهی اتصال به دیتابس از کادر متن استفاده کنم یعنی وقتی ادرس IP تو کادر متن وارد شد جایگزین ادرس قبلی بشه برای اتصال به دیتابیس مثل این.
var ip = Properties.Settings.Default.IP;
string sqlConnectionString = @"Data Source=" + ip + "\\sqlexpress;Initial Catalog=master;Integrated Security=True"; // کانکشن اس کیوال
این دستور تو فرم هستش ولی تو app.config با میکشل بر خورد کردم.
<connectionStrings><add name="DBFAPOSHEntities" connectionString="metadata=res://*/DataBase.csdl|res://*/DataBase.ssdl|res://*/DataBase.msl;provider=System.Data.SqlClient;provid er connection string=&quot;data source=192.168.110.132\sqlexpress;initial catalog=DBFAPOSH;integrated security=True;MultipleActiveResultSets=True;App=En tityFramework&quot;" providerName="System.Data.EntityClient" /></connectionStrings>

میبنید من برای اتصال به دیتابیس مجبورم ادرس IP رو دستی بدم ولی چون ادرس IP امکان عوض شدنش هستش برای اتصال به دیتابیس به مشکل بر میخورم منظور این هستش.
data source=192.168.110.132\sqlexpress;i در app.config ممنون میشم کمک کنید تا این رو هم مشکلش رو حل کنم برای اتصال به دیتابیس.

ژیار رحیمی
شنبه 10 مرداد 1394, 21:08 عصر
سلام دوست گرامی روش دستکاری app.config اشتباه میباشد .خود .Net با استفاده از کلاسهای پیشفرض امکان دسترسی به app.config هم خواندن هم نوشتن رو داره .به این پست سری یزنید تابع دستکاری app.config رو گذاشتم .اگر سوالی بود در خدمتم
http://barnamenevis.org/showthread.php?502155-%D8%A8%D8%A7%D8%B2-%DA%A9%D8%B1%D8%AF%D9%86-%D9%81%D8%A7%DB%8C%D9%84-app-config-%D8%AF%D8%B1-%D9%81%D8%A7%DB%8C%D9%84-%D9%85%D8%AA%D9%86%DB%8C-%D9%88-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1%D8%A7%D8%AA&p=2241971&viewfull=1#post2241971

davidrobert
یک شنبه 11 مرداد 1394, 17:59 عصر
دوست عزیز یک نمونه فایل بابت تغییر ارتباط کانکشن با دیتابیس رو داری برای من قرار بدی ممنون میشم.چون در هنگام کار با دیتابیس برای من مهم هستش ادرس جدید رو قرار بدم و دیگه اتوماتیک با ادرس جدید بیاد بالا.

davidrobert
دوشنبه 12 مرداد 1394, 08:46 صبح
خواهشن یکی کمک کنه تو ادرس IP اتصال به دیتابیس ک هی راه به راه عوض میشه گیر هستم ممنون میشم کمک کنید. تو app.config اگه سورس کمکی دارید برای دستکاریش تز طریق فرم ممنون میشم کمک کنید.

@liReza11800
دوشنبه 12 مرداد 1394, 08:48 صبح
شما از طریف entity با دیتابیست ارتباط برقرار کردی ؟
بعد میخوایی آدرس کانکشن استرینگ رو از برنامت بیاری بیرون که هر موقع خواستی بدون اکتفا به سورس عوض کنی ؟
اگه درست حدس زدم بگو تا کمکت کنم

davidrobert
دوشنبه 12 مرداد 1394, 10:04 صبح
شما از طریف entity با دیتابیست ارتباط برقرار کردی ؟ بعد میخوایی آدرس کانکشن استرینگ رو از برنامت بیاری بیرون که هر موقع خواستی بدون اکتفا به سورس عوض کنی ؟ اگه درست حدس زدم بگو تا کمکت کنم بله 100% درصد درست حدس زدید

ژیار رحیمی
دوشنبه 12 مرداد 1394, 19:13 عصر
public static void ChangeConnectionString(string srv)
{
var connection = ConfigurationManager.ConnectionStrings["DatabaseContext"].ConnectionString;
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connection) { DataSource = srv };
var config = ConfigurationManager.OpenExeConfiguration(Configur ationUserLevel.None);
var connectionStringsSection = (ConnectionStringsSection)config.GetSection("conne ctionStrings");
connectionStringsSection.ConnectionStrings["DatabaseContext"].ConnectionString = builder.ConnectionString;
config.AppSettings.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("connectionStr ings");
}


نحوه فراخوانی کافی ست رشته IP به تابعارسال شود(DatabaseContext) نام ConnectionString در فایل app.config میباشد با نام کانکشن استرینگ خودت جایگزین کن.این تابع بصورت runtime ConnectionString رو تغییر میدهد.لازم به ذکر است ویژوال استودیو را در مد run as administrator ران شده باشه


ChangeConnectionString("192.168.1.2");

davidrobert
سه شنبه 13 مرداد 1394, 12:02 عصر
دوستان من از این کد استفاده کردم و جواب داد ادرس کانکشن من رو ایجاد کرد. این رو هم بگم من از EF6 استفاده میکنم برای ارتباط با دیتابیس
دستور در فرم.
public void updateConfigFile(string con)
{
//updating config file
XmlDocument XmlDoc = new XmlDocument();
//Loading the Config file
XmlDoc.Load(AppDomain.CurrentDomain.SetupInformati on.ConfigurationFile);
foreach (XmlElement xElement in XmlDoc.DocumentElement)
{
if (xElement.Name == "connectionStrings")
{
//setting the coonection string
xElement.FirstChild.Attributes[2].Value = con;
}
}
//writing the connection string in config file
XmlDoc.Save(AppDomain.CurrentDomain.SetupInformati on.ConfigurationFile);
}

void ChangeConnectionAppConfig()
{
try
{
StringBuilder Con = new StringBuilder("metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=");
Con.Append(TxtIP.Text);
Con.Append(";initial catalog=");
Con.Append(txtMulti1.Text);
Con.Append(";user id=MyLogin;MultipleActiveResultSets=True;App=Entit yFramework");
string strCon = Con.ToString();
updateConfigFile(strCon);
//Create new sql connection
SqlConnection Db = new SqlConnection();
//to refresh connection string each time else it will use previous connection string
ConfigurationManager.RefreshSection("connectionStrings");
Db.ConnectionString = ConfigurationManager.ConnectionStrings["DBFAPOSHEntities"].ToString();

}
catch (Exception E)
{
MessageBox.Show(ConfigurationManager.ConnectionStr ings["DBFAPOSHEntities"].ToString() + ".This is invalid connection", "Incorrect server/Database");
}
}
و این دستور ایجاد شده در App.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrame workSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="Storage_program_canopy.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<connectionStrings>
<add name="DBFAPOSHEntities" providerName="System.Data.EntityClient" connectionString="" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFac tory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

</entityFramework>
<userSettings>
<Storage_program_canopy.Properties.Settings>
<setting name="IP" serializeAs="String">
<value>192.168.110.132</value>
</setting>
</Storage_program_canopy.Properties.Settings>
</userSettings>
</configuration>
از این جهت که دیتابیس رو درست میکنه مشکلی نیست. ولی وقتی دستور ارتباط این طوری باشه پیغام خطا این میشه.
<add name="DBFAPOSHEntities" providerName="System.Data.EntityClient" connectionString="" />
133906
ولی وقتی دستور در app.config این طوری بشه پیغام خطا این میشه.
<add name="DBFAPOSHEntities" connectionString="" providerName="System.Data.EntityClient"/>
133907
دوستان من چیکار کنم تا app.config با من راه بیاد و بزاره از دیتابیسم استفاده کنم.

وقتی ادرس در app.config اضافه میشه به این صورت هستش.
<add name="DBFAPOSHEntities" providerName="System.Data.EntityClient" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&amp;quot;data source=192.168.110.132\sqlexpress;initial catalog=DBFAPOSH;user id=MyLogin;MultipleActiveResultSets=True;App=Entit yFramework" />

davidrobert
سه شنبه 13 مرداد 1394, 13:08 عصر
دوستان کسی کد تغییر ادرس اتصال به دیتابیس با EF رو داره که بشه رشته اتصال رو تغییر دارد خارج از سورس که عذت نکنه و امکان ارتباط به دیتابیس و کار با دیتابیس رو بده ممنون میشم بابت سوال بالا جواب داده تغییر میده و یک دفعه یک تغییر کوچک کل برنامه رو از کار میندازه ممنون میشم کمک کنید یه نمونه فایل درست که کار کنه و ارتباط به دیتابیس رو بده.