View Full Version : ارسال لیستی از اطلاعات به sql
Payman62
چهارشنبه 26 مرداد 1390, 02:09 صبح
سلام.
من یه لیستی از اطلاعات دارم که میخوام در دیتابیس ذخیره کنم. در واقع یه جورایی اینا یه لیستی از رکوردها میشن.
این رکوردها یا باید همه با هم ثبت شن یا هیچ کدوم ثبت نشن.
میخوام بفرستمشون به sql تا در storeprocedure اجرا بشه و در صورت بروز مشکل در وسط کار rollback کنم. اما روش ارسال لیستی از اطلاعات رو نمیدونم.
ممنون میشم راهنمایی کنید.
یوسف زالی
چهارشنبه 26 مرداد 1390, 12:49 عصر
سلام.
اگر دیتای شما از نوع varbinary نیست همه رو در یک رشته بلند بفرستید که مثلا داده ها با $ از هم جدا شده باشه.
در SQL هم با حلقه و SubString اونها رو از هم جدا کنید.
روش دیگه اینه که همه رو در جدول موقتی بریزید و با پایان اون دستور Insert رو بفرستید تا همه اونها رو Insert - Select کنه که یک دستور اتمیک محسوب میشه.
Payman62
چهارشنبه 26 مرداد 1390, 13:12 عصر
سلام.
این روش دیگه آخرین روشه. یعنی خود sql امکان دریافت لیست اطلاعات رو نداره؟
چون قبل از اون لیست یه مقدار دیگه ای هم تو یه تیبل دیگه ثبت میشه. بعد کلید اصلی اون رکورد به عنوان کلید خارجی در ثبت اون لیست اطلاعات استفاده میشه. حالا اگه ثبت این لیست اطلاعات به مشکل بر بخوره اون مقدار اولیه هم باید rollback بشه.
اگه ثبت لیست اطلاعات به مشکل بر بخوره چطور اون مقدار اولیه که قبلا در یه پروسیجر دیگه ثبت شده رو rollback کنم؟
تنها راه اینه که کل ثبت هام رو چه اون مقدار اولیه چه اون لیست اطلاعات رو در یه store procedure انجام بدم تا در صورت مشکل rollback کنم؟
یوسف زالی
چهارشنبه 26 مرداد 1390, 16:32 عصر
با استفاده از روش جدول میانی و موقتی می تونین روی insert - select از اون و ست کردن مستر اونها یک تراکنش بنویسید.
در این صورت اگر همه ردیفها نرفتند که اصلا سراغ insert نمیرید.
اگر همه رفته بودند و در جدول میانی قرار گرفتند موقع تثبت اونها در جدول اصلی هم که تراکنش گذاشتید.
کاملا مطمئن هست.
داده ها -> جدول موقتی
آیا تمام داده ها با موفقیت در جدول میانی هست؟
اگر نه -> حذف داده ها از جدول میانی
اگر بله -> insert مستر و insert select داده ها با هم در یک تراکنش در یک SP.
Payman62
چهارشنبه 26 مرداد 1390, 18:14 عصر
سلام.
به صورت یه رشته به یه پروسیجر فرستادم. در همون پروسیجر رکورد اولی رو ثبت کردم و بعد رشته رو تفکیک کردم و تک تک رکوردها رو ثبت کردم. اگر ارور هم بده که rollback میشه.
البته ترنزکشنش تو خود c# هستش.
Galawij
پنج شنبه 27 مرداد 1390, 15:23 عصر
یک از راه حل هایی که برای همچین مواردی استفاده می شود استفاده از نوع داده XML است. البته اگر برای ارتباط با بانک اطلاعاتیتون از دستورات LINQ استفاده می کنید، همچین قابلیتی را دارد.
Payman62
یک شنبه 30 مرداد 1390, 03:03 صبح
سلام.
پارامتر رو xml تعریف کنم و داده ها رو ارسال کنم؟ روش جالبیه. اما باید خود داده ها رو هم تو C# به xml تبدیل کنم.
این روش حرفه ای تره. احتمال خطاشم کمتره.
اما با دستورات xml در sql آشنایی ندارم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.