کانکشن استرینگ فایل ریشه app.config در تمام پروژه قابل استفاده هست حتی در ویزاردها
نمونه یک فایل ریشه
<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.Entit yFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
</startup>
<connectionStrings>
<add name="CnnString" connectionString="Data Source=192.168.50.22;
Persist Security Info=True;
User ID=a;Password=a;
Initial Catalog=mydb"/>
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnect ionFactory, EntityFramework"/>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServ ices, EntityFramework.SqlServer"/>
</providers>
</entityFramework>
</configuration>
اگر نام رشته اتصال ما CnnStringباشد جهت دسترسی در کد سی شارپ بدینصورت هست
using (var cnn = new SqlConnection(ConfigurationManager.ConnectionStrin gs["CnnString"].ConnectionString))
{
}
این نکته مهم که فضای نام که در اسمبلی System.Configoration هست باید به برنامه رفرنس داده بشود
تغییر کانکشن استرینگ فایل کانفیگ در کدها
کانگشن استرینگ یک رشته هست و باید تکه های اون رشته رو از هم جدا کرد و مقدار دهی کرد
میتونیم از یک کلاس برای نگهداری اجزای زشته اتصال استفاده کنیم
و یک کلاس دیگه برای جدا کردن رشته
در کدهایی که در زیر فرستادم این کار انجام شده
SplitString SplitData { get; set; }
IList<SplitString> SplitStringList { get; set; }
private void LoadConnectionStrings()
{
var cnSection = ConfigurationManager.OpenExeConfiguration(Configur ationUserLevel.None);
String connString = cnSection.ConnectionStrings.ConnectionStrings["CnnString"].ConnectionString;
SplitStringList = new List<SplitString>();
string[] split = connString.Split(new[] { ';'});
var counter = 0;
foreach (var s in split)
{
if (s.Trim() != "")
{
counter = counter + 1;
SplitData = new SplitString(counter, s.Split(new[] { '=' })[1]);
SplitStringList.Add(SplitData);
}
}
txtServerName.Text = SplitStringList.Single(x => x.Counter == 1).Value;
txtID.Text = SplitStringList.Single(x => x.Counter == 3).Value;
txtPass.Text = SplitStringList.Single(x => x.Counter == 4).Value;
txtDB.Text= SplitStringList.Single(x => x.Counter == 5).Value;
}
private void ChangeConnectionSettings(ConnectionStringItem cp)
{
var cnSection = ConfigurationManager.OpenExeConfiguration(Configur ationUserLevel.None);
String connString = cnSection.ConnectionStrings.ConnectionStrings[cp.Name].ConnectionString;
connString = ChangeConnectionStringItems(connString, "Data Source", cp.DataSource);
//connString = ChangeConnectionStringItems(connString, "provider connection string=\"server", cp.DataSource);
connString = ChangeConnectionStringItems(connString, "User ID", cp.Username);
connString = ChangeConnectionStringItems(connString, "Password", cp.Password);
connString = ChangeConnectionStringItems(connString, "Initial Catalog", cp.InitCatalogue);
//connString = ChangeConnectionStringItems(connString, "Database", cp.InitCatalogue);
cnSection.ConnectionStrings.ConnectionStrings[cp.Name].ConnectionString = connString;
cnSection.Save();
ConfigurationManager.RefreshSection("connectionStr ings");
}
private String ChangeConnectionStringItems(string connString, string option, string value)
{
String[] conItems = connString.Split(';');
String result = "";
foreach (String item in conItems)
{
if (item.StartsWith(option))
{
result += option + "=" + value + ";";
}
else
{
result += item + ";";
}
}
return result;
}
public class SplitString
{
public SplitString(int counter, string value)
{
Counter = counter;
Value = value;
}
public int Counter { get; set; }
public string Value { get; set; }
}
public class ConnectionStringItem
{
public String Name { get; set; }
public String DataSource { get; set; }
public String Username { get; set; }
public String Password { get; set; }
public String InitCatalogue { get; set; }
public ConnectionStringItem(String name, String dataSource, String username, String password,
String initCat)
{
Name = name;
DataSource = dataSource;
Username = username;
Password = password;
InitCatalogue = initCat;
}
}
private void btnSave_Click(object sender, EventArgs e)
{
var csc = new ConnectionStringItem("CnnString", txtServerName.Text.Trim(),
txtID.Text.Trim(), txtPass.Text.Trim(), txtDB.Text.Trim());
ChangeConnectionSettings(csc);
}