Yanehsar
سه شنبه 09 تیر 1394, 23:23 عصر
سلام چند وقته با کانکشن استرینگ لینک مشکل دارم هنوزم نتونستم حلش کنم ممنون میشم کمکم کنید دیگه نمیکشه :عصبانی++::عصبانی++::عصبانی++:
اولین برنامه ای هست که با لینک و 3لایه نوشتم در ابتدا که لینک رو در برنامه ایجاد می کنیم میادش داخل properties برای ما کانکشن استرینگ از نوع Application ایجاد می کنه یعنی توسط کاربر قابل دستکاری نیست :متفکر::متفکر::متفکر::متفکر: خب؟چطوری می تونم تغییرش بدم ؟؟؟؟؟
با جستجو به این نتیجه رسیدم که App.config باید دستکاری بشه ! آیا درسته ؟
میخوام با استفاده از فرم زیر کاری بکنم که برنامه رو هر وقت خواستم و هرجا مدیریت کنم ( اگر خواستم تحت شبکه کنم راحت انجام بشه اگر خواستم local کار کنم هم به راحتی تغییرش بدم )
ممنون میشم راهنمائیم کنید چطوری می تونم اینکار رو بکنم.
132791
هم اکنون نیازمند یاری سبزتان هستیم:گیج::گیج::گیج::گیج::گیج:
Mahmoud.Afrad
سه شنبه 09 تیر 1394, 23:35 عصر
منظورت از لینک چیه؟ LinqToSql و یا EF؟
ali_md110
چهارشنبه 10 تیر 1394, 01:00 صبح
میتونید ابتدا یک کلاس بسازید و اعضای رشته اتصال رو درونش تعریف کنید این کلاس یک سازنده داره که میتونید بوسیله ارسال مقدار به سازنده اون رشته اتصال درون فایل کانفیگ رو مقدار دهی کنید
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;
}
}
کانگشن استرینگ یک رشته هست که میشه با روشهای متفاوت اجزای اون رو بیرون کشید یکیشون دستور Split هست البته با Regex هم میشه انجام دارد
برای این کار ابتدا یک کلاس با 2 عضو میشازیم برای نگهداری رشته تکه شده همراه با یک کلید برای مشخص شدن اون تکه
public class SplitString
{
public SplitString(int counter, string value)
{
Counter = counter;
Value = value;
}
public int Counter { get; set; }
public string Value { get; set; }
}
و یک تابع مینویسیم و با اجرای اون رشته اتصال رو با این تابع تجزیه و تحویل کلاس SplitString داده و درون حافظه نگهداری میکنیم
private String SplitStringItem(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;
}
برای ویرایش رشته اتصال بوسیله تابع SplitStringItemرشته اتصال رو تجریه و تحویل کلاس ConnectionStringItem داده و درون فایل کانفیگ ذخیره میکنیم
private void ChangeConnectionSettings(ConnectionStringItem cp)
{
var cnSection = ConfigurationManager.OpenExeConfiguration(Configur ationUserLevel.None);
String connString = cnSection.ConnectionStrings.ConnectionStrings[cp.Name].ConnectionString;
connString = SplitStringItem(connString, "Data Source", cp.DataSource);
//connString = SplitStringItem(connString, "provider connection string=\"server", cp.DataSource);
connString = SplitStringItem(connString, "User ID", cp.Username);
connString = SplitStringItem(connString, "Password", cp.Password);
connString = SplitStringItem(connString, "Initial Catalog", cp.InitCatalogue);
//connString = SplitStringItem(connString, "Database", cp.InitCatalogue);
cnSection.ConnectionStrings.ConnectionStrings[cp.Name].ConnectionString = connString;
cnSection.Save();
ConfigurationManager.RefreshSection("connectionStrings");
}
برای نمایش اطلاعات فایل کانفیک هم میتونیم یک تابع جدید بنویسیم نام رشته اتصال ما درون فایل کانفیک CnnString هست و فقط کافیه جایی مثل فرم لود صدا بزنیم
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<Form1.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);
// Console.WriteLine("COUNTER:" + counter + " " + s.Split(new[] { '=' })[1]);
}
}
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;
}
و این هم اجرای دستورات برای عمل ویرایش
var csc = new ConnectionStringItem("CnnString", txtServerName.Text.Trim(),
txtID.Text.Trim(), txtPass.Text.Trim(), txtDB.Text.Trim());
ChangeConnectionSettings(csc);
Yanehsar
جمعه 12 تیر 1394, 18:21 عصر
سلام
ممنون از راهنمائی شما ، برنامه ای ساده ای برای چک کردن و یادگیری خودم درست کردم ممنون میشم شما هم چک کنید تو برنامه برای ویرایش مشکل داره و از ChangeConnectionSettings(csc) خطا میگیره .
http://uploadgoogle.ir/uploads/1435934233681.rar
ali_md110
یک شنبه 14 تیر 1394, 00:04 صبح
سلام
این دوتابعSplitStringItem و ChangeConnectionSettings سطح دسترسی خصوصی دارند یا بصورت public بنویسید یا هردوشون انتقال بدید درون کدهای form1 برنامه صحیح کار میکنه
توی تابع ChangeConnectionSettings خط زیر رو اصلاح گنید
ConfigurationManager.RefreshSection("testConnection.Properties.Settings.karanehConnecti onString");
بحای اون باید سکشن رو بنویسید نه نام رشته اتصال
ConfigurationManager.RefreshSection("connectionStrings");
برنامه رو یکبار debug کنید و برید توی مسیر bin برنامه اونجا فایل اجرایی رو اجرا کنید و تغییر بدید میبینید که تغییرات انجام شدند
البته در حالت debug هم تغییرات قابل انجام هست و میشه مشاهده کرد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.