PDA

View Full Version : سوال: مشکل در جستجوی پارامتری



ma.rad
یک شنبه 07 فروردین 1390, 11:29 صبح
سلام
من قبلا هم این سوال رو پرسیدم ولی دوستان جوابی ندادن
میخوام براساس پارامتر یا پامتر هایی جستجو انجام بدم ولی چون تعداد پارامترها زیاد نمی خوام برا هرکدومشون یه StoredProcedure ایجاد کنم چه طور میشه یه جستجوی ترکیبی بنویسم
البته من یه بار با or نوشتم ولی جواب نداد
لطفا راهنمایی کنید
اینم نمونه فرم من البته من 12 تا پارامتر دارم

67935

ehsanara
یک شنبه 07 فروردین 1390, 12:24 عصر
اگه میخوای برا اساس همه باشه باید And بزاری نه Or
Or میاد هرجا که فیلدی شبیه به یکی از این پارامترها رو پیدا کرد نشون میده
ضمنا شما میتونی شرط Where رو بصورت یه رشته عمومی درست کنی و با این حالتی که طراحی کردی بگی اگه مثلا CheckBox شغل تیک داشت بیاد فیلد شغل رو با مقدارش به Where اضافه کنه
متغیر عمومی
string WhereC = "WHERE ";

میتونی یه تابع بنویسی برا مقدار دهی

void WhereString(CheckBox Chb ,string Value ,string DbField)
{
if (Chb.Checked)
WhereC += WhereC.Length == 6 ? DbField + " = " + Value : " AND " + DbField + " = " + Value;
}

و اینطوری هم رشته WhereC رو پر کنی

WhereString(ChbJob, ComboJob.Text, "Job");
WhereString(chbGender, ComboGender.Text, "Gender");
WhereString(chbBirthDay, ComboBirthDay.Text, "BirthDay");
WhereString(chbEvid, ComboEvid.Text, "Evid");

که آخرین فیلد میشه اسم فیلدی که تو StoreProcedure یا View یا Tableی که میخوای براش Query بنویسی میشه
اگه جاییش رو متوجه شدی بگو

ma.rad
یک شنبه 07 فروردین 1390, 12:37 عصر
لطفا میشه کد مربوط به sql بگید؟چون من از StoredProcedur استفاده می کنم؟

ehsanara
یک شنبه 07 فروردین 1390, 12:47 عصر
توی StoreProcedure چی نوشتی؟
برای Where یه پارامتر تعریف کن و اون رو به SP بفرست
در اینصورت از رشته بالا WHERE رو حذف کن و توی شرط 6 رو به صفر عوض کن
یعنی

string WhereC = "";

و

WhereC += WhereC.Length == 0 ? DbField + " = " + Value : " AND " + DbField + " = " + Value;

اگه نتونستی StoreProcedure رو بزار تا برات توضیح بدم

ehsanara
یک شنبه 07 فروردین 1390, 13:19 عصر
میتونی StoreProcedure رو هم اینطوری بنویسی

CREATE PROCEDURE [dbo].[SearchSp]
( @WhereC Nvarchar(300))
AS
BEGIN
SET NOCOUNT ON;
Declare @Quer VarChar(1000)
SELECT @Quer = 'SELECT * FROM YoutTbl WHERE '+@WhereC
EXEC @Quer
END


برای اجراش توی برنامه هم که این دستور رو توی SQLCommand مینویسی
"EXEC YourSPname "+WhereC