ايران ويج

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

این رکوردها یا باید همه با هم ثبت شن یا هیچ کدوم ثبت نشن.
میخوام بفرستمشون به sql تا در storeprocedure اجرا بشه و در صورت بروز مشکل در وسط کار rollback کنم. اما روش ارسال لیستی از اطلاعات رو نمیدونم.

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

باید وقتی کانکشن رو باز می کنی یه Transaction رو بهش وصل کنی
کد های INSERT رو بنویسی(مثلا 5 تا Insert داری)
در نهایت Commit می کنی

حالا این اطلاعات یا همشون با هم تو دیتابیس ذخیره می شن یا هیچکدوم ذخیره نمیشن و شما یه ارور دریافت می کنی!
ممکنه یکم بیشتر توضیح بدید!

مخصوصا رولبک رو خیلی علاقمند شدم
سلام.
دوستان عزیز من روش کار ترنزکشن رو بلدم. سوال من در مورد روش ارسال لیستی از اطلاعات به sql بود. یه لیستی که مقادیرش متغیره.
فرض کنید مشتری از فروشگاه خرید کرده و میخواهیم خریدهای اون مشتری رو به نامش ثبت کنیم. 1 بار ممکنه فقط 1 جنس خریده شده باشه. 1 بار ممکنه n جنس خریده شده باشه. منطقی هم نیست در صورت بروز مشکل نصف اجناس ثبت بشن.

کاری که من کردم این بود که اومدم لیست اطلاعات رو که همه عدد و کد بودن رو تو یه رشته قرار دادم. بینشون هم یه کاراکتر برای جداسازی در sql قرار دادم. بعد تو sql اطلاعات و کدها رو از رشته کشیدم بیرون و تو یه حلقه تو دیتابیس ثبتشون کردم.
اما فکر میکنم روش حرفه ای تری برای این کار وجود داشته باشه و دلم میخواست حرفه ای تر عمل کنم. فکر میکنم با XML میشد حرفه ای تر کار رو انجام داد.
(۱۳-شهریور-۱۳۹۰, ۱۳:۰۷:۳۱)Di Di نوشته است: [ -> ]ممکنه یکم بیشتر توضیح بدید!

مخصوصا رولبک رو خیلی علاقمند شدم

سلام.

دیدی جان برای مواقعی که میخواهیم چندین عمل ثبت و ویرایش و حذف و ... رو هم زمان در دیتابیس انجام بدیم از ترنزکشن استفاده میکنیم. موردی مثل همین سوال من.

این امکان رو sql برای برنامه نویسان قرار داده و خودش اعمال تغییرات در دیتابیس رو مدیریت میکنه تا اگه وسط کار به هر دلیلی مثل قطعی برق عملیات نیمه کاره موند همه چی به حالت اول برگرده.

روش کار به این صورته که ما دستورات sql رو داخل ترنزکشن به این صورت مینویسیم.
کد:
Begin Transaction
Insert
Update
Delete

و در صورتی که مشکلی پیش نیاد در نهایت با دستور Commit Transaction تایید نهایی رو صادر میکنیم.
اما اگه به هر دلیلی به مشکل یا اروری بر بخوریم با دستور Rollback همه تغییرات که داخل ترنزکشن اتفاق افتاده بود رو به حالت اولیه برمیگردونیم.
حتی اگه مشکل سخت افزاری مثل قطعی برق پیش بیاد sql خودش عمل Rollback رو انجام میده.

البته داخل #C هم کلاس آماده برای کار با ترنزکشن هست و عملیات Commit و Rollback رو از داخل خود #C هم میشه مدیریت کرد که راحت تره.

با این روش دیگه خیالمون از ثبت کامل اطلاعات یا عدم ثبتشون راحته. در واقع هیچ وقت اطلاعات ناقص ثبت نمیشن.
پیمان جان امکانش هست درمورد کلاس C# بیشتر توضیح بدی؟میدونم اینجا بخش دیتا بیس هست و نباید سوال سی را اینجا بپرسم ولی ...
اگر امکانش هست برای درک بهتر با کد توضیح بدید!
(۱۹-شهریور-۱۳۹۰, ۰۱:۳۵:۵۳)Ghoghnus نوشته است: [ -> ]پیمان جان امکانش هست درمورد کلاس C# بیشتر توضیح بدی؟میدونم اینجا بخش دیتا بیس هست و نباید سوال سی را اینجا بپرسم ولی ...
اگر امکانش هست برای درک بهتر با کد توضیح بدید!

سلام.
این یه کد ساده برای استفاده از ترنزکشن.

کد:
SqlConnection objConnection = new SqlConnection(ConnectionString);
objConnection.Open();
SqlTransaction MyTransaction;
MyTransaction = objConnection.BeginTransaction();

try
{
    SqlCommand objCommand = new SqlCommand();
    objCommand.Connection = objConnection;
    objCommand.Transaction = MyTransaction;
    objCommand.CommandType = CommandType.Text;
    objCommand.CommandText = "Select * from Table";

    int retVal = objCommand.ExecuteNonQuery();
    MyTransaction.Commit();
}
catch
{
    MyTransaction.Rollback();
}
finally
{
    objConnection.Close();
}