PDA

View Full Version : جستجوی پیشرفته با storedprocedure



mahdieh5
چهارشنبه 11 آبان 1390, 16:28 عصر
سلام
چطور سرچ پیشرفته را با stored procedure بنویسم؟ به طوری که اطلاعات از چند فیلد که کاربر در فرم پر میکند با اطلاعات دیتابیس مقایسه میشود.

Rejnev
چهارشنبه 11 آبان 1390, 16:44 عصر
create proc prc
@p1 int=0, @p2 nvarchar(100)=null /*,...*/
as
begin
select * from tbl
where
(@p1 =0 or id=@p1) and
(@p2 is null or name = @p2)
/*and ...*/
end


توی برنامه، مثلا اگه فقط میخوای به پارامتر دوم مقدار بدی، میتونی به پارامتر یک مقدار default بدی، یا یک مقداری بدی که توی شرط ها در نظر گرفته نشه.
من حالت اول رو میگم:

string s="exec prc default,'mohammad' ";
//execute and read it...

mahdieh5
چهارشنبه 11 آبان 1390, 22:02 عصر
create proc prc
@p1 int=0, @p2 nvarchar(100)=null /*,...*/
as
begin
select * from tbl
where
(@p1 =0 or id=@p1) and
(@p2 is null or name = @p2)
/*and ...*/
end


توی برنامه، مثلا اگه فقط میخوای به پارامتر دوم مقدار بدی، میتونی به پارامتر یک مقدار default بدی، یا یک مقداری بدی که توی شرط ها در نظر گرفته نشه.
من حالت اول رو میگم:

string s="exec prc default,'mohammad' ";
//execute and read it...


خیلی ممنون. میشه در مورد مقدار default بیشتر توضیح دهید، چون همون مقدار default در شرط ها در نظر گرفته میشه و روی نتیجه جستجو اثر میذاره.

omidh2007
پنج شنبه 12 آبان 1390, 05:35 صبح
این هم یه نمونه از AdvancedSearch ولی توسط LINQtoSQL



var q1 = from a in linq.Books

where (a.Title.Contains(txt_Book_Title.Text.Trim()) || txt_Book_Title.Text.Trim() == string.Empty) &&
(a.Author.Contains(txt_Book_Author.Text.Trim()) || txt_Book_Author.Text.Trim() == string.Empty) &&

(a.ISBN == txt_Book_ISBN.Text || txt_Book_ISBN.Text.Trim() == string.Empty) &&
(a.Translator.Contains(txt_Book_Translator.Text.Tr im()) || txt_Book_Translator.Text.Trim() == string.Empty) &&
(a.Description.Contains(txt_Book_Description.Text. Trim()) || txt_Book_Description.Text.Trim() == string.Empty)
select a;

Rejnev
یک شنبه 15 آبان 1390, 14:23 عصر
مقدار default رو وقتی به استورد پراک پاس بدیم یعنی اس کیو ال، از مقدار پیشفرض پارامت استفاده کنه...
مثلا توی اون مثال، توی تعریف پروسیجر، به اس کیو گفتم که مقدار پیشفرض پارامتر1، مقدار صفره... پس وقتی از کلمه دیفالت استفاده کنیم، این پارامتر مقدار صفر خواهد گرفت. اگر هم توی تعریف، مقدار پیشفرض تعیین نکنیم، مقدار نول خواهد گرفت.
سوال و مشکل شما به پاسکاری پارامترها و اینا زیاد مربوط نیست، به این مربوطه که اگه یک پارامتر مقدار نگرفته بود، توی شرط چطوری این رو کنترل کنیم. که اینجا من با دستور "یا" این کار رو انجام دادم... این نکته ش بود