PDA

View Full Version : سوال: ذخیره کردن داده ها در پایگاه داده sql



darklady
شنبه 25 شهریور 1391, 16:57 عصر
دوستان من یک دیتابیس در C# ایجاد کردم که این پایگاه از نوع Express Sql هستش. تا الان تونستم عمل insert رو انجام بدم ولی به محض این که از برنامه خارج میشم داده های وارد شده پاک میشوند. برای ذخیره شدن داده ها عملیات update روی یه دکمه دیگه نوشتم. اما همچنان مشکل پابر جاست. اینم نمونه کد update :



[LTR]

SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=.\\SQLExpress;AttachDbFilename=|DataDirecto ry|\\haminjori.mdf;Integrated Security=True;User Instance=True";
con.Open();
string command = "Update Table1 Set sitename= @sitename Where (siteid=@siteid)";
SqlCommand cmd = new SqlCommand(command,con);
cmd.Parameters.Add("@sitename", SqlDbType.NVarChar).Value = textBox2.Text;
cmd.Parameters.Add("@siteid", SqlDbType.Int).Value = int.Parse(textBox1.Text);
cmd.ExecuteReader();
con.Close();
MessageBox.Show("Data has been Saved");

SharpSabre
شنبه 25 شهریور 1391, 17:46 عصر
this.Validate();
this.Table1BindingSource.EndEdit();
this.Table1dataTable.update(this.DataSet.Table1);

darklady
شنبه 25 شهریور 1391, 17:49 عصر
ببخشید این کدی که شما نوشتید باید در ادامه همین کدی که خودم نوشتم کپی کنم؟
آخه این table1databinding رو نمیشناسه.......

SharpSabre
شنبه 25 شهریور 1391, 18:20 عصر
ببخشید این کدی که شما نوشتید باید در ادامه همین کدی که خودم نوشتم کپی کنم؟
آخه این table1databinding رو نمیشناسه.......
اگر از BindingSource استفاده نکردید
this.Validate();
//this.Table1BindingSource.EndEdit();
this.Table1TableAdapter.Update(this.DataSet.Table1 );


بله این دستورات رو در ادامه بذارید.

nilmil_nil
شنبه 25 شهریور 1391, 19:05 عصر
من فکر میکنم
مشکل جای دیگست
ببینید در ویژوال استودیو
وقتی روی دیتابیس کلیک میکنی
یه Property داره تو Properties که باید اونو رو Copy if newer دقیقا نمیدونم ولی بگردین پیداش میکنی
اینجوریه که شما هر وقت build میکنی از اون دیتابیس رو قبلی که تو debug هستش کپی میکنه و بخاطر همین وقتی دوباره run میکنی بانکت خالی
میشه

darklady
شنبه 25 شهریور 1391, 19:14 عصر
ببخشید table adapter رو کجا بایدتعریف کنم؟ و این که این دستورات باید بعد con.close نوشته بشه؟
یه چیز جالب این که از این کد هیچ اروری نمیگیره و با موفقیت جدول رو آپدیت میکنه اما تو اجرای بعدی تغییرات رو لحاظ نمیکنه.از توی دیباگ برنامه رو اجرا کردم خیلی خوب هم اضافه کرد به جدول و هم آپدیتش کرد تغییرات هم اعمال شد. اما تو محیط اجرای خود ویژوال این تغییرات اعمال نمیشه. من از ورژن 2010 استفاده میکنم.

darklady
شنبه 25 شهریور 1391, 19:15 عصر
من فکر میکنم
مشکل جای دیگست
ببینید در ویژوال استودیو
وقتی روی دیتابیس کلیک میکنی
یه Property داره تو Properties که باید اونو رو Copy if newer دقیقا نمیدونم ولی بگردین پیداش میکنی
اینجوریه که شما هر وقت build میکنی از اون دیتابیس رو قبلی که تو debug هستش کپی میکنه و بخاطر همین وقتی دوباره run میکنی بانکت خالی
میشه

بله اون رو چک کردم و گزینه always copy رو انتخاب کردم. اما مشکل حل نشد.

SharpSabre
شنبه 25 شهریور 1391, 19:42 عصر
ببخشید table adapter رو کجا بایدتعریف کنم؟ و این که این دستورات باید بعد con.close نوشته بشه؟
یه چیز جالب این که از این کد هیچ اروری نمیگیره و با موفقیت جدول رو آپدیت میکنه اما تو اجرای بعدی تغییرات رو لحاظ نمیکنه.از توی دیباگ برنامه رو اجرا کردم خیلی خوب هم اضافه کرد به جدول و هم آپدیتش کرد تغییرات هم اعمال شد. اما تو محیط اجرای خود ویژوال این تغییرات اعمال نمیشه. من از ورژن 2010 استفاده میکنم.
دوست گرامی شما DataSet و TableAdapter رو از منوی Tool باید به برنامه اضافه کنی تا تغییرات رو بتونی تو دیتابیس اعمال کنی تغییرات شما در DataGrid ذخیره می شن ولی رو دیتابیس نه برای همین برنامه تا وقتی بازه همه چی درسته ولی کافیه برنامه بسته بشه .. D:

قبل از MessgeBox اضافه کن.

abcd_a
شنبه 25 شهریور 1391, 21:26 عصر
اگه فایل mdf کات کنید به پوشه debug کنار فایل exe برنامه مشکل حل میشه

darklady
شنبه 25 شهریور 1391, 21:35 عصر
اگه فایل mdf کات کنید به پوشه debug کنار فایل exe برنامه مشکل حل میشه
این کار رو انجام دادم و متاسفانه مشکل حل نشد.

abcd_a
شنبه 25 شهریور 1391, 22:00 عصر
باید جواب بده تو یه مثال دیگه امتهان کنید
بانکهای که تو ویژوال استادیو اضافه می شون با این روش تغییرات در بانک ذخیره میشه

momasa
یک شنبه 03 دی 1391, 21:37 عصر
احتمالاً خیلی دیره، اما جواب می دم شاید بعداً دوستانی با این مشکل برخورد کنند، برنامه ی شما هیچ مشکلی نداره، کاملاً درسته، اما اتقاقی که می افته اینه که زمانی که شما برنامه رو اجرا می کنید یه دیتابیس که در سورس پروژه تون دارید رو در مکانی که برنامتون در حال اجرا است (فولدر دیباگ یا ریلیز) کپی می کنه، (به خاطر تنظیمات دیتابیستون و استفاده از |DataDirectory| در مسیر ConnectionString دیتابیستون) زمانی که شما داده وارد می کنید، شما دارین در واقع داده رو از دیتابیسی که از سورس پروژتون اجرا شده کپی می کنید، به همین خاطر در زمان بیلد کردن پروژتون دیتا بیستون پاک می شه، اما اگه برنامتون رو خارج از ویژوال استودیو اجرا کنید با چند دفعه اجرا می بینید که بانکتون درست کار می کنه.

این به این خاطره که شما احتمالاً دارید از |DataDirectory| استفاده می کنید و تنظیمات مربوط به دیتابیستون جوری هست که هر بار بیلد می کنید براتون دیتابیستون رو در محل اجرا پروژه کپی می کنه.
شما می تونید به صورت موقتی مسیر دیتابیستون رو مطلق تعریف کنید C:\myproject\mms.sdf تا بتونید تو محیط ویژال استودیو هم زمانی که داده تست وارد می کنید بعد از اون بتونید ببینید اطلاعاتتون رو.