سلام
چطور سرچ پیشرفته را با stored procedure بنویسم؟ به طوری که اطلاعات از چند فیلد که کاربر در فرم پر میکند با اطلاعات دیتابیس مقایسه میشود.
سلام
چطور سرچ پیشرفته را با stored procedure بنویسم؟ به طوری که اطلاعات از چند فیلد که کاربر در فرم پر میکند با اطلاعات دیتابیس مقایسه میشود.
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...
این هم یه نمونه از 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;
مقدار default رو وقتی به استورد پراک پاس بدیم یعنی اس کیو ال، از مقدار پیشفرض پارامت استفاده کنه...
مثلا توی اون مثال، توی تعریف پروسیجر، به اس کیو گفتم که مقدار پیشفرض پارامتر1، مقدار صفره... پس وقتی از کلمه دیفالت استفاده کنیم، این پارامتر مقدار صفر خواهد گرفت. اگر هم توی تعریف، مقدار پیشفرض تعیین نکنیم، مقدار نول خواهد گرفت.
سوال و مشکل شما به پاسکاری پارامترها و اینا زیاد مربوط نیست، به این مربوطه که اگه یک پارامتر مقدار نگرفته بود، توی شرط چطوری این رو کنترل کنیم. که اینجا من با دستور "یا" این کار رو انجام دادم... این نکته ش بود