نمایش نتایج 1 تا 10 از 10

نام تاپیک: ارسال حلقه ای پارامترها به SP

  1. #1
    کاربر تازه وارد آواتار shgroup
    تاریخ عضویت
    آذر 1386
    محل زندگی
    شاهرود
    پست
    99

    ارسال حلقه ای پارامترها به SP

    سلام دوستان
    من تو یک برنامه Win app به یک مشکلی برخورد کردم که به این شکله:
    در برنامه فرمی نمایش داده میشه که جدولی از مقادیر را کاربر وارد میکند که باید در sql ذخیره شود اما مشکل اینجاست که اطلاعات باید به صورت سطری ذخیره شوند نه ستونی منظورم اینه که هر پارامتر در یک ستون از جدول قرار نمی گیره

    مثال :
    سال- تیپ - کد بخش - کد زیر بخش - مبلغ

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

    سپاس

  2. #2

    نقل قول: ارسال حلقه ای پارامترها به SP

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

  3. #3
    کاربر تازه وارد آواتار shgroup
    تاریخ عضویت
    آذر 1386
    محل زندگی
    شاهرود
    پست
    99

    نقل قول: ارسال حلقه ای پارامترها به SP

    نقل قول نوشته شده توسط حمیدرضاصادقیان مشاهده تاپیک
    سلام.
    شما وقتی از دستور Insert استفاده میکنید یک ردیف ایجاد میکنه نه یک ستون!!
    همچنین وقتی به پارامترها مقدار پاس بدید و در Insert همون مقادیر رو استفاده کنید مشکلتون حله.
    من متوجه نشدم دقیقا ایراد کار شما کجاست!!
    بله دوست عزیز می دونم که در دستور Insert یک ردیف اطلاعاتی ذخیره میشه (منظور منم از سطر همینه)
    یک مثال می زنم تا بهتر موضوع روشن بشه
    فرض کنید در یک فروشگاه می خواهید نرخ اجناسی را توسط یک جدول نرخنامه وارد بانک کنید
    در صورتی که به قول خودم ستونی طراحی کنیم این شکلی میشه جدول ما:

    اسم ستونهای جدول: کد - سال - قیمت اتو - قیمت جارویرقی - قیمت چرخ خیاطی و...
    مقادیر وارد شده: 1 - 1388 - 20000 - 250000 - 165000 و ...

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

    اسم ستونهای جدول: کد - سال - کد محصول - مبلغ
    مقادیر وارد شده: 1 - 1388 - 14 - 250000
    در روش دوم که من هم همین کار رو کردم فرض کنید تعداد اجناس مثلا 10 تا بیشتر نیست و ثابت است حال در فرمی ما می خواهیم یک جا همه اجناس را قیمت گذاری کنیم و
    با فشردن دکمه ثبت مقادیر هر کالا در هر ردیف جدا مثل مثال فوق ذخیره گردند - همین
    حال باید این ارسال مقادیر را در یک حلقه با 10 بار تکرار عمل Insert انجام دهیم یا خیر این حلقه را در SP قرار دهیم.
    شاید سوال من خیلی مبتدی است اما سواله دیگه :D
    مممنونم

  4. #4

    نقل قول: ارسال حلقه ای پارامترها به SP

    سلام.
    اگر از نسخه 2000 به بالا استفاده میکنید میتوانید از دستور Insert into به این شکل استفاده کنید.

    Insert into Table1 (Code,Year,Code_Product,Price)
    Values (1,1388,14,25000),
    (2,1388,20,250004),
    (3,1389,10,450000),
    .
    .
    .





  5. #5

    نقل قول: ارسال حلقه ای پارامترها به SP

    شما برنامه رو باید طوری طراحی کنید که در هر حالتی کار کنه ، با فرضیات و قانونهایی که فعلا ثابت هستند و بعدا ممکنه تغییر کنه نمیشه کار کرد. اگر کاربر اقلام اجناسش 100 تا شد چی؟ اگر 1000 تا شد چطور؟
    نمیتونید همه این مقادیر رو یکجا به SP بفرستید. مطمئن ترین کار اینه که SP هربار فقط یک سطر رو ذخیره کنه و توی برنامه و با استفاده از یک حلقه هر بار اطلاعات یکی از سطرها رو به SP پاس بدید. توی این حالت اگر کاربر هرچندتا سطر وارد کنه بدون مشکل ذخیره میشه و دردسر اضافی هم نمیکشید.

  6. #6
    کاربر تازه وارد آواتار shgroup
    تاریخ عضویت
    آذر 1386
    محل زندگی
    شاهرود
    پست
    99

    نقل قول: ارسال حلقه ای پارامترها به SP

    سلام
    مرسی از پاسخ دوستان

    جناب صادقیان عزیز راهی که گفتید رو اطلاع دارم اما چه طوری باید به این شکل مقادیر رو در سطر های بعدی پاس داد ؟
    جناب Yarahmadi عزیز درست می فرمایید شما اما یه سوال دیگه اینه که آیا 10 با اجرا کردن دستور Insert به طور یکجا کاری درست است و از نظر سرعت چطور ؟

    پیشنهاد دیگری دوستان ندارند ؟
    باز هم سپاس فراوان

  7. #7

    نقل قول: ارسال حلقه ای پارامترها به SP

    آیا 10 با اجرا کردن دستور Insert به طور یکجا کاری درست است و از نظر سرعت چطور ؟
    تقریبا میشه گفت از نظر زمانی فرقی بین 10 بار عمل Insert انجام شدن با یکجا ذخیره کردن 10 رکورد وجود نداره ، ولی از نظر پیاده سازی خیلی با هم فرق دارند ، در حالت یکجا شما مجبور به پیاده سازی پیچیده تر و طولانی تر هم سمت برنامه و هم سمت SQL Server هستید.
    10 یا حتی 100 عمل Insert چندان سربار زمانی نداره که بخواید نگران زمان اون باشید ، توی برنامه به علت سرعت بالای سیستم های امروزی فرقی بین 1 Insert با 100 Insert احساس نمیکنید(البته در حالتی داده ها دارای اندازه معمولی باشند)

  8. #8

    نقل قول: ارسال حلقه ای پارامترها به SP

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

  9. #9

    نقل قول: ارسال حلقه ای پارامترها به SP

    نقل قول نوشته شده توسط Reza_Yarahmadi مشاهده تاپیک
    تقریبا میشه گفت از نظر زمانی فرقی بین 10 بار عمل Insert انجام شدن با یکجا ذخیره کردن 10 رکورد وجود نداره
    سلام.
    البته که تفاوت دارن، اما خوب، این تفاوت در تعداد بالای رکوردها محسوس هستش. Insert کردن گروهی رکوردها با یک دستور و در یک Transaction، سریعتر از درج همون تعداد رکورد در Transaction های جداگانه هستش. بخصوص اگر Round-Trip های بین Client و Server رو نیز در نظر بگیریم، تفاوت سرعت چشمگیرتر خواهد بود.

    @shgroup: اگر اصرار به درج اطلاعات در یک بار فراخوانی SP دارید، میتونید داده ها رو بصورت XML به SP پاس کنید، سپس در Stored Procedure خودتون با یک SELECT (عموما) ساده، داده ها رو بصورت یکجا در بانک ذخیره کنید. قبلا فکر میکنم در این مورد در تاپیک دیگه ای توضیح داده ام، لطفا برای اطلاعات بیشتر جستجو کنید.

    موفق باشید.

  10. #10
    کاربر دائمی
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    تهران
    سن
    47
    پست
    182

    نقل قول: ارسال حلقه ای پارامترها به SP

    چیزی که دوست مون نیاز دارن نحوه ارسال Array یا List به Store Procedure هستش که همون طور که می دونید تکنیک های مختلفی در این خصوص هست و اگه دوست عزیز در این تالار جستجو کنن حتماً بحث های مفیدی رو پیدا می کنن.

    قطعاً درج یکباره چندین رکورد با درج تک به تک اونها تفاوت داره و تا جای ممکن سعی کنید تمام دیتا رو یکجا به SQL Server بدید و همه رو یکجا درج کنید. اما چیزی که هست اینه که اگه برنامه تون تعداد کاربر کمی داره، این تفاوت اونقدرها محسوس نیست. خصوصاً اگه برنامه تون تک کاربره است نگران نباشید.

    ولی توصیه می کنم از این جریان حُسن استفاده کنید و با تکنیک نحوه ارسال چندین رکورد و درج یکباره اونها در دیتابیس رو آشنا بشید. ممکنه کمی زحمت داشته باشه، اما به تجربه اش می ارزه، ممکنه بعداً یک جایی به کارتون بیاد.

    اگه خواستید با تکنیک های مختلف این کار آشنا بشید یه نگاهی به این لینک بندازید:

    http://www.sommarskog.se/arrays-in-sql-2005.html

    کمی طولانیه ولی ارزش خوندن داره.

    با احترام

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •