PDA

View Full Version : سوال: C# و ارتباط از طریق App.config



farzaneh1073
دوشنبه 16 آذر 1394, 19:15 عصر
با سلام

من پروژه تحت ویندوز دارم می نویسم و فایل app.config اضافه کردم و در connection string مسیر پایگاه داده را |dataDirectory|/db.mdf گذاشتم
هم با LINQ و هم بدون آن کار میکنه ولی مشکل اینه که مثلا داده جدید که ثبت میشه وارد جدول های بانک اطلاعاتی نمیشه تا زمانی که برنامه باز هست داده هایی را که جدید وارد کردم نمایش میده ولی برنامه که بسته بشه و دوباره باز بشه هیچ کدام نیستن
datadirectory رو که بردارم مسیر بانک رو بذارم درست کار میکنه
چکار کنم برای حل این موضوع که با datadirectory هم کار کنه

ژیار رحیمی
دوشنبه 16 آذر 1394, 19:32 عصر
سلام connectionString باضافه کد Insert رو بزار تا ببینیم مشکل از کجاست

farzaneh1073
دوشنبه 16 آذر 1394, 19:45 عصر
سلام connectionString باضافه کد Insert رو بزار تا ببینیم مشکل از کجاست



connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|Datadirector y|\Clinical.mdf;Integrated Security=True;User Instance=True;Context Connection=False"

که این کد در app.config نوشتم

این کد ها را هم روی دکمه ذخیره نوشتم


SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrin gs["con"].ConnectionString);
var dbUser = new DataAccess.myDataLinDataContext(cnn);
DataAccess.User _user = new DataAccess.User()
{
LastName= textBox2.Text, firstName= textBox1.Text, type =textBox3.Text, UserName="admin", Password="admin"



};
dbUser.Users.InsertOnSubmit(_user);
dbUser.SubmitChanges();
dataGridView1.DataSource = dbUser.Users;

davidrobert
دوشنبه 16 آذر 1394, 19:49 عصر
با سلام

من پروژه تحت ویندوز دارم می نویسم و فایل app.config اضافه کردم و در connection string مسیر پایگاه داده را |dataDirectory|/db.mdf گذاشتم
هم با LINQ و هم بدون آن کار میکنه ولی مشکل اینه که مثلا داده جدید که ثبت میشه وارد جدول های بانک اطلاعاتی نمیشه تا زمانی که برنامه باز هست داده هایی را که جدید وارد کردم نمایش میده ولی برنامه که بسته بشه و دوباره باز بشه هیچ کدام نیستن
datadirectory رو که بردارم مسیر بانک رو بذارم درست کار میکنه
چکار کنم برای حل این موضوع که با datadirectory هم کار کنه

دوست عزیز مشکل این هستش احتمالا برنامه داره دیتابیس رو از کنار فایل اجرای میخونه یعنی موقعی که برنامه اجرا میشه دیتابیس کپی میشه در مسیر فایل اجرا به همین خاطر شما موقع اجرا اول داده ندارید برنامه خام می باشد و اطلاعات وارد میکنید همون دقیقه مشاهده میکنید ولی برای بار دوم برنامه رو اجرا میکنید دیتابیس رو از کنار فایل اجرای باز پاک کرده و دوباره ایجاد میکنه و میبینید داده های که قبلا وارد کردید نمی باشد این به این خاطر می باشد که دیتابیس از کنار فایل اجرای خونده میشه نه از مسیری که تایین کردید. و به همین خاطر در هر بار اجرا میبنید دیتابیس صفر شده و داده ها از بین رفته

farzaneh1073
دوشنبه 16 آذر 1394, 19:53 عصر
دوست عزیز مشکل این هستش احتمالا برنامه داره دیتابیس رو از کنار فایل اجرای میخونه یعنی موقعی که برنامه اجرا میشه دیتابیس کپی میشه در مسیر فایل اجرا به همین خاطر شما موقع اجرا اول داده ندارید برنامه خام می باشد و اطلاعات وارد میکنید همون دقیقه مشاهده میکنید ولی برای بار دوم برنامه رو اجرا میکنید دیتابیس رو از کنار فایل اجرای باز پاک کرده و دوباره ایجاد میکنه و میبینید داده های که قبلا وارد کردید نمی باشد این به این خاطر می باشد که دیتابیس از کنار فایل اجرای خونده میشه نه از مسیری که تایین کردید. و به همین خاطر در هر بار اجرا میبنید دیتابیس صفر شده و داده ها از بین رفته


من کدها رو نوشتم میشه با توجه به کدها بگید باید چکار کنم؟

ژیار رحیمی
دوشنبه 16 آذر 1394, 20:49 عصر
چرا کانکشن رو پاس کردی به کلاس myDataLinDataContext ؟
شما به احتمال زیاد در فایل app.config دوتا ConnectionString وجود دارد.بررسی کن
شما خط 1 کد بالا رو حذف و خط 2 رو به این صورت اصلاح کن

var dbUser = new DataAccess.myDataLinDataContext();

موقعی که شما Linq2Sql رو به پروژ اضافه میکنی در حالت ویزارد کانکشن استرینگ رو در app.config اضافه میکند. برای نمونه سازی از کلاس myDataLinDataContext لازم نیست شما connection بهش پاس کنی ،از ConnectionString پیش فرض استفاده میکند

farzaneh1073
دوشنبه 16 آذر 1394, 22:26 عصر
چرا کانکشن رو پاس کردی به کلاس myDataLinDataContext ؟
شما به احتمال زیاد در فایل app.config دوتا ConnectionString وجود دارد.بررسی کن
شما خط 1 کد بالا رو حذف و خط 2 رو به این صورت اصلاح کن

var dbUser = new DataAccess.myDataLinDataContext();

موقعی که شما Linq2Sql رو به پروژ اضافه میکنی در حالت ویزارد کانکشن استرینگ رو در app.config اضافه میکند. برای نمونه سازی از کلاس myDataLinDataContext لازم نیست شما connection بهش پاس کنی ،از ConnectionString پیش فرض استفاده میکند





من در فایل app.config کانکشن پیش فرض رو پاک کردم چون میخوام از datadirectory استفاده کنم
و بخاطر این باید کانکشن رو بهش پاس بدم

حالا میشه بهم بگید چطور از data directory استفاده کنم؟ توی هر پروژه ای ازش استفاده کردم تغییرات روی جدول ها اعمال نمیشه

ژیار رحیمی
سه شنبه 17 آذر 1394, 11:48 صبح
ConnectionString پیش فرض رو بجای حذف میتونستی اصلاح کنی. شما ابتدا ConnectionString رو در فایل app.configخذف کن سپس وارد بخش Settingپروژه شو و مانند تصویر زیر ConnectionString رو در بخش setting پروژه اضافه کنید(شما ConnnectionString رو در فایل app.config بنام con ذخیره کردی)
در بخش Setting هم به همین نام ذخیره شود
137322
بعد فایل myDataLin.designer.cs رو باز کنید و کد زیر رو اضافه کنید نام namespace که در کد yourNamespace هست به namespace پروژه خود تغییر دهید

public myDataLinDataContext() :
base(global::yourNamespace.Properties.Settings.Def ault.con, mappingSource)
{
OnCreated();
}

farzaneh1073
یک شنبه 22 آذر 1394, 11:57 صبح
این تغییراتی که گفتید را اعمال کردم
برنامه اجرا میشه مشکلی نداره ولی من مشکلم اینه که تغییراتی که اعمال میکنم توی برنامه تا زمانی که برنامه باز هست نمایش می دهد ولی وقتی برنامه را می بندم و database را باز میکنم داخل جدولها هیچ تغییراتی اعمال نمی کند ، حتی برنامه هم دوباره باز میکنم همون جدول ها قبل از تغییرات رو میاره
وقتی data directory را پاک میکنم و بجاش آدرس کامل data base رو می نویسم تمام دستورات درست اجرا میشه و تغییرات هم روی جدول ها اعمال میشه
مشکلم همینه که از data directory استفاده میکنم
برای حل این باید چکار کنم
لازمه که از datadirectory استفاده بشه چون می خوام نصبش کنم روی سیستم های مختلف بهتره data directory باشه ؟

mehran788
یک شنبه 22 آذر 1394, 12:32 عصر
دوست عزیز مشکل این هستش احتمالا برنامه داره دیتابیس رو از کنار فایل اجرای میخونه یعنی موقعی که برنامه اجرا میشه دیتابیس کپی میشه در مسیر فایل اجرا به همین خاطر شما موقع اجرا اول داده ندارید برنامه خام می باشد و اطلاعات وارد میکنید همون دقیقه مشاهده میکنید ولی برای بار دوم برنامه رو اجرا میکنید دیتابیس رو از کنار فایل اجرای باز پاک کرده و دوباره ایجاد میکنه و میبینید داده های که قبلا وارد کردید نمی باشد این به این خاطر می باشد که دیتابیس از کنار فایل اجرای خونده میشه نه از مسیری که تایین کردید. و به همین خاطر در هر بار اجرا میبنید دیتابیس صفر شده و داده ها از بین رفته

به نظر من هم مشکل همینه. من خودم هر وقت می خوام به بانک آدرس نسبی بدم و با data directory کار کنم این کار رو نگه می دارم واسه زمانی که می خوام ستاپ درست کنم چون قبل از اون این مشکل وجود داره.
وقتی شما با data directory آدرس میدید هنگام اجرای پروژه بانک از مسیر bin/debug داخل پوشه پروژه اجرا میشه ولی وقتی پروژه از حالت اجرا در میاد از مسیر خود پروژه اجرا میشه

farzaneh1073
دوشنبه 23 آذر 1394, 11:17 صبح
به نظر من هم مشکل همینه. من خودم هر وقت می خوام به بانک آدرس نسبی بدم و با data directory کار کنم این کار رو نگه می دارم واسه زمانی که می خوام ستاپ درست کنم چون قبل از اون این مشکل وجود داره.
وقتی شما با data directory آدرس میدید هنگام اجرای پروژه بانک از مسیر bin/debug داخل پوشه پروژه اجرا میشه ولی وقتی پروژه از حالت اجرا در میاد از مسیر خود پروژه اجرا میشه



برای حل این مشکل باید چکار کنم؟ یعنی اصلا از data directory استفاده نکنم؟ مسیر بانک اطلاعاتی را کامل بهش بدم؟

ژیار رحیمی
دوشنبه 23 آذر 1394, 12:00 عصر
دوست گرامی شما database رو درSolution Explorer به پروژه اضافه کردی و خاصیت Copy to Output Directory رو روی Copy Always ست کردی این باعث میشه هر بار که پروژه رو Run میکنی دیتابیس که در مسیر پروژه هست به پوشه Debug در هر بار اجرای برنامه کپی میشود این دلیل مشکل شماست.برای رفع مشکل روی نام دیتابیس در پنجره Solution Explorer راست کلیک و سپس گزینه Properties در پنجره properties خاصیت Copy to Output Directory رو به Do not Copy یا Copy if newerست کن مشکل حل میشه. و |Data Directory| هم در ConnectionString استفاده کن تا موقع انتقال پروژه با مشکل مواجه نشی.