PDA

View Full Version : ساخت تابعی با آرگومان 'پارامتر'



sasan_22
جمعه 20 بهمن 1391, 20:11 عصر
با سلام
من یه SP توی بانکم دارنم که حدودا 12 تا آرگومان (ورودی) میگیره و براساس اطلاعاتی که کاربر وارد کرده جستجو رو انجام میده و هر چه قدر اطلاعات وارد شده بیشتر باشه سریعتر به نتیجه می رسه .
حالا می خواستم بدونم این تابع رو چطور باید بنویسم با رعایت اصول 3 لایه؟؟:افسرده:
(در ضمن برای عملیات حذف واضافه هم این تابع رو می خوام البته برای اضافه که باید 10 تا آرگومان برای تابع بدم راه دیگه ای نیست؟؟؟؟؟؟:ناراحت:)

mostafa.hnz
جمعه 20 بهمن 1391, 20:42 عصر
دو لایه بنویس
با ADO.NET می نویسی؟
اگه با ADO.NET بنویسی باید یه کلاس تعریف کنی ، توابعت رو اونجا بنویس
بعد ازش استفاده کن :)
توابعت رو هم public در نظر بگیر

fakhravari
جمعه 20 بهمن 1391, 21:20 عصر
SP یک دستور کاری به چند لایه نداره.
برای چند لایه کار کردن هم دست خودتونه این 3 لاسه یه اسم که بیشتر روش تمرکز کنی با 1 کلاس میتونی اینا رو پیاده کنی.

sasan_22
جمعه 20 بهمن 1391, 21:29 عصر
دوست عزیز مشکل من با لایه ها نیست مشکل من با خود تابع است که نمیدونم چطور بنویسم
این SP من :


CREATE PROCEDURE Search
@id INT,
@Name nvarchar(20),
@Family nvarchar(30),
@Telephone NVARCHAR(10),
@Status BIT

AS
BEGIN
SELECT * FROM Major
WHERE id=@id AND ...
END


5تا پارامتر اجباری ( و گاها اختیاری)
تابعی که این SP رو با دادن پارامتر اجرا کنه؟

ممنون

sasan_22
جمعه 20 بهمن 1391, 21:33 عصر
دوست عزیز آقای mostafa.hnz ممنون از جوابتون
ولی با این کار
توابعت رو هم public در نظر بگیر دیگه 3 لایه بودن معنا نداره خواص شئی گرا بدن از بین میره من قبلا یه برنامه کوچیک بصورت اسپاگتی نوشتم الان جرات نمیکنم برم سمتش .
بی زحمت ج رو اصول باشه بهتره

ممنون

plus
جمعه 20 بهمن 1391, 22:44 عصر
دوست عزیز مشکل من با لایه ها نیست مشکل من با خود تابع است که نمیدونم چطور بنویسم
این SP من :


CREATE PROCEDURE Search
@id INT,
@Name nvarchar(20),
@Family nvarchar(30),
@Telephone NVARCHAR(10),
@Status BIT

AS
BEGIN
SELECT * FROM Major
WHERE id=@id AND ...
END


5تا پارامتر اجباری ( و گاها اختیاری)
تابعی که این SP رو با دادن پارامتر اجرا کنه؟

ممنون
مگه با SqlCommand نمیتونید Store ها رو اجرا کنید...؟ البته تا اونجا که من میدونم در MS SQL پارامتر اختیاری برای SP نداریم.
در ضمن میتونید یک نگاهی هم به دستور EXECUTE (http://msdn.microsoft.com/en-us/library/ms188332.aspx)در TSQLبندازین.

sasan_22
جمعه 20 بهمن 1391, 23:38 عصر
منظور من اینه که چطور میتونم به یه تابع - بعضی از آرگومان ها رو وارد نکنم . میخوام بررسی کنم آیا کاربر مثلا تکس باکس نام رو پر کرده یا نه اگه نکرده دیگه این رو به عنوان ورودی ندم به تابع تا جستجو هم بر اساس نام انجام بشه در حالی که کاربر اصلا نام رو وارد نکرده!!!
یعنی چطور میتونم تابعی با پارامترهای اختیاری درست کنم ؟؟ که بعضی ها رو وارد کنم بعضی ها رو نه

ممنون

mostafa.hnz
جمعه 20 بهمن 1391, 23:53 عصر
بله درسته برای اینکه شی گرایی کامل رعایت بشه باید کپسوله سازی و استاندارد سازی رو هم در نظر بگیریم

اگه منظور شما رو درست متوجه شده باشم
شما برای این کار باید تابعی که تعریف می کنید رو overLoad کنید
به این صورت که تابع مورد نظر تون رو چند بار با آرگومان های مختلف تعریف کنید با یک نام یکسان
و زمان استفاده هم ورودی های تابع شما متغیر خواهد بود
مثه متد show در کلاس messageBox