PDA

View Full Version : سوال: باز کردن فایل app.config در فایل متنی و ذخیره تغییرات



علی فتحی
یک شنبه 28 تیر 1394, 19:37 عصر
سلام .چگونه میتوان فایل app.config رو با .txt باز کرد و تغییرات رو ذخیره کرد.البته با open whis مشکلی وجود نداره لطفا طریقه کدنویسی سی شارپ رو توضیح دهید متشکر

اینو نوشتم ولی اخطار میده :
using System.IO;
FileStream fileStream = new FileStream("AttachDbFilename=|DataDirectory|App.Config.txt", FileMode.Open);

علی فتحی
یک شنبه 28 تیر 1394, 19:51 عصر
اینو پیدا کردم ولی بازم اخطار میده:
hhttp://8bit.ir/1391/05/02/%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%81%D8%A7%DB%8C%D9%84-app-config-%D8%AF%D8%B1-%D8%B2%D9%85%D8%A7%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87/

ژیار رحیمی
یک شنبه 28 تیر 1394, 20:11 عصر
سلام وقت بخیر.فایل app.config یه فایل xml هست.اگه بخوای خودت به ماننده یه فایل txt بخونیش و تغییرات رو اعمال کنی مکافات داره دنبالش نرو .بهترین راهش استفاده از کلاس های موجود در دات نت جهت خوندن و نوشتن در فایل app.config هست.به آسانی در حالت runtime هم میتونی هم دسترسی و هم تغییرات رو اعمال کنی.من یه نمونه کد که در موقع runtime میتونه connectionString رو تغییر بده میزام
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("connectionStrings");
connectionStringsSection.ConnectionStrings["DatabaseContext"].ConnectionString = builder.ConnectionString;
config.AppSettings.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("connectionStrings");

}

ژیار رحیمی
یک شنبه 28 تیر 1394, 20:15 عصر
لازم به یاداوری ست که DatabaseContext نام کانکشن استرینگ در فایل app.config میباشد که موقع استفاده به نام connectionString موجود در پروژه خود جایگزین کن

علی فتحی
یک شنبه 28 تیر 1394, 20:21 عصر
ممنون اقای زاگروتی عزیز کدی که گذاشتین ConfigurationManagerبرای سیستم من آشنا نیست . دلیلش چی میتونه باشه
اینم اضافه کردم
using System.Configuration;



اینم کانکشن من

<?xml version="1.0" encoding="utf-8"?><configuration> <connectionStrings> <add name="DDDDDEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl; provider=System.Data.SqlClient;provider connection string=&quot; Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DDDDD.mdf; Integrated Security=True;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> </connectionStrings></configuration>

ژیار رحیمی
یک شنبه 28 تیر 1394, 20:29 عصر
dllش رو در بخش rererences پروژه اضافه کن .system.configuration

علی فتحی
یک شنبه 28 تیر 1394, 22:26 عصر
بازم نشد فضای نامی اضافی خیلی به اپ اضافه میکنه باعث اخطار میشه:


<?xml version="1.0" encoding="utf-8"?><configuration>
<connectionStrings>
<add name="DDDEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
provider=System.Data.SqlClient;provider connection string=&quot;
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DDD.mdf;
Integrated Security=True;Connect Timeout=30;User Instance=True;
MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>


میخوام کد بالا در app.config رو به کد زیر تغییر بودم وصلام


<?xml version="1.0" encoding="utf-8"?><configuration>
<connectionStrings>
<add name="DDDEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
provider=System.Data.SqlClient;provider connection string=&quot;
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|1390\DDD.mdf;
Integrated Security=True;Connect Timeout=30;User Instance=True;
MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>

فقط عدد 1390 رو اضافه کنم در زمان اجرا

ژیار رحیمی
یک شنبه 28 تیر 1394, 22:55 عصر
متوجه 1390 که میخوای اضافه کنی نشدم.بیشتر توضیح بدین.یه توضیح هم بدین که میخوای کدوم بخش از کانکشن استریگ رو تغییر بدی

ژیار رحیمی
یک شنبه 28 تیر 1394, 23:06 عصر
اگر میخوای نام دیتابیس ازDDD.mdf به 1390DDD.mdf تغییر کند کد تابع ارسال شده به جای سرور که داخل براکت نوشته شده
{ DataSource = srv}
به
{ InitialCatalog=1390DDD}
چون به صورت تابع فراخوانی میشود بهتر است
{ InitialCatalog= srv}
و موقع فراخوانی تابع بدین صورت انجام شود
ChangeConnectionString(1390DDD)

ژیار رحیمی
یک شنبه 28 تیر 1394, 23:13 عصر
پیغام خطا رو بزار ببینم کمکی از دستم برمیاد

علی فتحی
دوشنبه 29 تیر 1394, 00:10 صبح
سول که ازاین واضحتر نمیشه .در کدهای نشون داده شده بالا اینو تغییر بدم
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DDD.mdf;
به
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|1390\DDD.mdf;

1390 نام دیتابیس نیست . نام پوشه که دیتابیس DDD.mdf داخل اون قرارداره

ژیار رحیمی
دوشنبه 29 تیر 1394, 00:41 صبح
ببخش کاک علی اشتباه از ادیتور فروم هست واسه من بهم ریخته نشون داد متوجه سوال نشدم به جای { InitialCatalog= srv}
{ AttachDBFilename=@"|DataDirector y|1390\DDD.mdf" }

چون به صورت تابع فراخوانی میشود بهتر است
{ AttachDBFilename= srv}
و موقع فراخوانی تابع بدین صورت انجام شود

ChangeConnectionString(@"|DataDirector y|1390\DDD.mdf");

علی فتحی
دوشنبه 29 تیر 1394, 15:47 عصر
باتشکر من که هرکاری کردم تغییر نکرد . دوستان که به نتیجا رسیدن ممنون میشم کد رو اینجا برزارند.تغغیر متن app.cpnfigبا کد نویسی

با این روش انجام بدم بهتره
http://barnamenevis.org/showthread.php?498279-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%DA%A9%D8%A7%D9%86%DA%A9%D8%B4%D9%86-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%B4%D8%AF%D9%87-%D9%85%D8%B1%D8%A8%D9%88%D8%B7-%D8%A8%D9%87-Entity-Framework

علی فتحی
سه شنبه 30 تیر 1394, 21:16 عصر
اینم روش کار با 2 نمونه برای کسانی که ...
http://s3.picofile.com/file/8201440184/New_folder.rar.html

علی فتحی
چهارشنبه 31 تیر 1394, 03:50 صبح
نمونه های بالا خوبه ولی مشکلی وجود داره هنگام پشتیبان گبری
چکار کنم که هر شرکت بتونه فقط پشتیبان خودشو بازیابی کنه . چون کاربر شاید روی شرکت الف کارکنه و یک پشتیبان بنام aa.bakبسازه بعد روی شرکت ب کارکنه یادش بره ازفایل aa.bak بازیابی رو انجام بده دیگه میدونید چی میشه
تمام اطلاعات شرکت ب پاک میشه.لطفا اگر راهی رو پیشنهاد میدین ارائه فرمایید ممونم میشم.هر شرکت پشتیبان خودشو قبول کنه