PDA

View Full Version : تغییر چند رکورد در دیتا بیس



mahdishojaee
یک شنبه 17 تیر 1386, 00:20 صبح
سلام .
درسته که برای اضافه کردن هر رکورد در بانک اطلاعاتی باد یک بار دستور ExecuteNonQuery استفاده کرد و نمیشه با یک دستور مثلا 20 تا رکورد رو همزمان به بانک اطلاعاتی اضافه کرد ؟
و همینطور برای به روز کردن رکورد ها(یعنی روی n رکورد تغییرات مورد نظر رو انجام بدی و همه رو یکجا به روز کنی)؟
اگه ممکنه یکی کمکم کنه . قبلا از شما تشکر می کنم .

Alireza_Salehi
یک شنبه 17 تیر 1386, 00:22 صبح
دیتاست برای همین کاره !

mahdishojaee
یک شنبه 17 تیر 1386, 00:31 صبح
می دونم که واسه همین کاره . ولی من وقتی از متد Update مربوط به DataAdapter استفاده میکنم Error ـی میگیره مبنی بر اینکه شما برای به روز کردن نیاز به دستور SQL دارید . و منم نمیدونم که چه جوری میشه با یک دستور SQL چند رکورد رو به روز کنم .

Alireza_Salehi
یک شنبه 17 تیر 1386, 08:37 صبح
اولا نگفتی از 2003 استفاده می کنی یا 2005!

اول قسمت UpdateCommnad مربوط به TableAdapter یا DataAdapter را با دستور update مورد نظر تنظیم کنید.فقط کافیه رکورد های مورد نظر رو به دیتاست اضافه کنید. بعد متد Update مربوط به DataAdapter را فراخوانی کنید خودش به صورت اتوماتیک تغییرات و موارد جدید رو ثبت می کنه.

hdv212
یک شنبه 17 تیر 1386, 09:09 صبح
وقتی از DataAdapter استفاده میکنید، برای اینکه از توابعش مثل همین Update استفاده کنید، نیاز به این دارید که دستور معتبری از Update رو به قسمت UpdateCommand اش پاس کنید، دستور Update شما هم، همون دستور Update معمولیه که شما میخواهید روی جدولتون انجام بدید، یادتون باشه که حتی برای fill کردن هم باید دستور select معتبری به dataAdapter تون پاس کنید.

mahdishojaee
یک شنبه 17 تیر 1386, 10:13 صبح
خوب اینایی که گفتید درسته ولی با هر دستور SQL فقط میشه یک رکورد رو افزود (یا تغییر داد) . اگه من اشتباه میکنم لطفا کد مورد نظرتون رو (فقط قسمت مربوط به DataAdapter و SQLCommand) رو بنویسید . در ضمن من با VS 2005 کار می کنم .

mahdishojaee
یک شنبه 17 تیر 1386, 16:06 عصر
لطفا جوب بدید .

ghafoori
یک شنبه 17 تیر 1386, 20:43 عصر
(فقط قسمت مربوط به DataAdapter و SQLCommand) رو بنویسی
دوست عزیز این قسمت که یک خط دو خط که نیست یک فصل کتاب توضیح داره شما بهتر است کتاب اقای هاشمیان که داخل سایت است را بخوانید

hdv212
یک شنبه 17 تیر 1386, 20:45 عصر
پس از اینکه خاصیت UpdateCommand مربوط به dataAdapter تون رو با دستور Update، تنظیم کردید، مثلا اگه دیتا گرید شما به این جدول بایند شده :

this.datagriview1.datasource= this.ds.tables.["customers"]
در رویداد دکمه ی بروز رسانی میتونی از این کد استفاده کنی :

this.dataadapter1.update(this.ds.tables.["customers"]);
this.ds.tables.["customers"].acceptChanges();
حالا در runTime چنانچه شما مقادیری رو در دیتاگریدتون تغییر بدید و بعد روی دکمه ی بروزرسانی کلیک کنید، بایستی جدول شما بروز بشه، حالا چه یه رکورد و چه هزاران رکورد.

mahdishojaee
چهارشنبه 20 تیر 1386, 22:24 عصر
در مورد کتاب آقای هاشمیان باید خدمتتون عرض کنم که سایت RabidShare پیغام : File Not Found رو میده اما در مورد روش آقای hdv212 هم باید بگم که من از دیتا گرید ویو استفاده نمی کنم . واسه همین نمیدونم دستور SQL ام رو چه جوری بدم که همه اون تغییرات رو شامل بشه ، مثلا من 5 تا رکورد اضافه کردم و 10 رکورد رو هم ویرایش کردم و 6 تا هم پاک کردم.(حالا وقتی متد Update مربوط به DataAdapter رو صدا می زنم میگه که شما باید از یک دستو Sql برای تغییرات استفاده کنید.)

omid_Ahmadi
پنج شنبه 21 تیر 1386, 07:55 صبح
اگر نمی خوای از دیتا ست و کلاسهای دیگه مرتبط با اون استفاده کنی، می تونی دستورات SQL مورد نظر خودت رو تولید کنی و بین هر کدوم یک ; قرار بدی. بعد دستور رو با استفاده از SQLCommand روی بانک اطلاعاتی اجرا کن تا همه اجرا بشن. متد ExecuteNonQuery تعداد رکوردهایی که به علت اجرای دستورات وارد شده تغییر کردن رو به عنوان نتیجه برمی گردونه.


در مورد سوال پست 10 هم توضیح بدید، شما می خواهید چند تا دستور SQL رو یک مرتبه با استفاده از ExecuteNonQuery ایجاد کنید که روش اون رو گفتم، چه مشکل دیگه ای هست؟

mahdishojaee
پنج شنبه 21 تیر 1386, 09:57 صبح
ببینید من اینطوری به دیتا تیبلم رکورد اضافه می کنم :

myDataTable.Rows.Add(myDataRow)این کار رو بارها توی برنامه انجام میدم .
حالا می خوام که با این تیکه کد اونا رو توی دیتابیس اصلی هم اعمال کنم :

myDataAdapter.Update(myDataSet.table[myDataTable],tbl1)توی این قسمت Error میده که باید دستور SQL وارد کنم .حالا من دستور SQL رو هم به این صورت می دم :

mySqlInsertCommand.CommandText="Insert into tbl1(...,...,...)values(\n@.....,\n@.....,\n@..... )"بعد از اینکه این رو به DataAdapter (به خاصیت InsertCommand) میدم ، اون فقط یکدونه رکورد به دیتا بیسم اضافه میکنه ، در صورتی که من کّلی رکورد به اون اضافه کردم . در مورد Edit و Delete هم اینجورییه !:اشتباه:

omid_Ahmadi
پنج شنبه 21 تیر 1386, 10:11 صبح
اگر دیتا ست رو به صورت دستی ایجاد می کنید (و همچنین بقیه اشیای مورد نیاز اون مثل Adapter) باید بر اساس دستور SQL مربوط به دریافت اطلاعات، دستورات مربوط به درج، حذف، و تغییر داده ها رو هم ایجاد و در خاصیتهای مربوطه در Adapter قرار بدید. برای تولید این دستورات می تونید به سادگی از کلاس SqlCommandBuilder استفاده کنید.
خطایی که به وجود میاد احتمالاً به دلیل اینه که قسمتی از Command (مثلاً پارامترها) رو اشتباه وارد می کنید.

توصیه می کنم اگر روی نحوه عملکرد دیتا ست وارد نیستید، از ویزاردها استفاده کنید و یا قبل از شروع کار با معماری و ساختار اونها کاملاً آشنا بشید.

موفق باشید.

mahdishojaee
پنج شنبه 21 تیر 1386, 15:25 عصر
از SqlCommandBuilder استفاده کردم ، برای اضافه کردن مشکلی پیدا نکرد ممنونم از کمکتون ولی برای حذف و به روز کردن این Error رو می ده :

Dynamic SQL generation for the DeleteCommand is not supported against a SelectCommand that does not return any key column information.

(البته وقتی قبل از Update کردن متد AcceptChanges مربوط به DataTable رو صدا میزنم حذف یا به روز نمی شوند ، و این Error رو وقتی میده که من این متد رو صدا نمیزنم)


یه درخواست دیگه هم داشتم ، اگه من از SqlCommandBuilder استفاده نکنم باید چه کار کنم ؟

Mrs.Net
پنج شنبه 21 تیر 1386, 19:06 عصر
جواب اصلی همون commandbuilder بود که گفتند
و برای مشکل آخرت هم احتمالا هیچ کدوم از فیلدهات primary key نیستند
یکی از فیلدهاتو key قرار بده.

mahdishojaee
جمعه 22 تیر 1386, 20:33 عصر
دوست عزیز من به این صورت کلید رو تعیین کردم ولی بازم Error میده

myDataset.Tables[0].PrimaryKey = new DataColumn[] { myDataset.Tables[0].Columns[0] };

safasoft
سه شنبه 26 تیر 1386, 10:21 صبح
باید از دستورات SQL در برنامه خود استفاده کنی مثل Insert که با کمک اون می تونی هر چند تا رکورد را فقط با یک بار باز کردن بانک و یک دستور ExecuteNonQuery به بانک اضافه کنی . بهت پیشنهاد می کنم از کتاب های SQL استفاده کنی.

Mrs.Net
پنج شنبه 04 مرداد 1386, 22:41 عصر
دوست عزیز من به این صورت کلید رو تعیین کردم ولی بازم Error میده

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