PDA

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



amineashna
جمعه 17 مهر 1388, 13:39 عصر
سلام دوستان
می خواستم اگه کسی در زمینه نوشتن Query برای جستجوی پیشرفته (منظورم نوشتن یک query برای یک فرمی که یه چیزی شبیه جستجوی پیشرفته همین سایته) راه کار یا استراژی خاصی داره به من هم یاد بده.:متفکر:
ممنون

masoud.ramezani
جمعه 17 مهر 1388, 14:36 عصر
سلام دوست عزیز

برای این کار راه های فراوانی وجود دارد. یکی از این کارها اینه که query رو در کدتون بسازید مثلا با توجه به داده هایی که کاربر وارد میکنه مرحله به مرحله قسمتهای جدید رو به کوئری اضافه کنید و در نهایت اون رو اجرا کنید.
دومین راه اینه که اگر میخواهید از Stored Procedure استفاده کنید، بخشهای مختلف جستجوی خودتون رو به عنوان پارامتر به آن بفرستید و در sp چک کنید که اگر پارامتری null پاس نشده بود آن را در جستجو دخیل کند.
ولی راه اول راه ساده تری میباشد.

masoud.ramezani
جمعه 17 مهر 1388, 14:42 عصر
سلام دوست عزیز

برای این کار راه های فراوانی وجود دارد. یکی از این کارها اینه که query رو در کدتون بسازید مثلا با توجه به داده هایی که کاربر وارد میکنه مرحله به مرحله قسمتهای جدید رو به کوئری اضافه کنید و در نهایت اون رو اجرا کنید.
دومین راه اینه که اگر میخواهید از Stored Procedure استفاده کنید، بخشهای مختلف جستجوی خودتون رو به عنوان پارامتر به آن بفرستید و در sp چک کنید که اگر پارامتری null پاس نشده بود آن را در جستجو دخیل کند.
ولی راه اول راه ساده تری میباشد.

amineashna
جمعه 17 مهر 1388, 16:25 عصر
سلام
در مورد روش اول که query داخل برنامه درست میشه یه سوال دارم.
اگه بخواهیم از عملوند های > یا < یا between استفاده کنیم طرز ساخت query به چه شکل می شه؟

masoud.ramezani
یک شنبه 19 مهر 1388, 09:30 صبح
سلام دوست عزیز
متوجه منظورتون نمیشم. شما دارید یک string در کدتون تولید میکنید. هر جایی که لازم داشتید باید با توجه به ورودی‌ها یک بخش جدید به رشته خودتون اضافه کنید.

آریوس1985
یک شنبه 19 مهر 1388, 12:27 عصر
ببین این کمکت میکنه؟

dt.Clear();
string strQuery = "SELECT tb_UnitManagement.AutoID AS UnitID,tb_BusyRooms.AutoID,tb_UnitManagement.UnitN ame,tb_UnitManagement.FK_UnitType,tb_UnitType.Unit TypeName,";
strQuery += " tb_UnitManagement.MaxCountSoldiers,tb_UnitManageme nt.FK_UnitType,";
strQuery += " (tb_CustomerQualifications.FirstName+' '+tb_CustomerQualifications.LastName) AS ReserverName,";
strQuery += " tb_UnitState.[Name] AS CurrentState,tb_BusyRooms.DateFrom,tb_BusyRooms.Da teTo";
strQuery += " FROM tb_UnitManagement";
strQuery += " INNER JOIN tb_UnitType ON tb_UnitManagement.FK_UnitType =tb_UnitType.AutoID ";
strQuery += " INNER JOIN tb_BusyRooms ON tb_UnitManagement.AutoID = tb_BusyRooms.RoomID";
strQuery += " LEFT JOIN tb_CustomerQualifications ON tb_BusyRooms.CustomerID = tb_CustomerQualifications.AutoID";
strQuery += " INNER JOIN tb_UnitState ON tb_BusyRooms.Reservation = tb_UnitState.AutoID";
strQuery += " WHERE (1=1)";

if (!string.IsNullOrEmpty(ReserverName))
strQuery += " AND tb_CustomerQualifications.FirstName LIKE N'%"+ReserverName+"%'";

if (!string.IsNullOrEmpty(ReserverFamily))
strQuery += " AND tb_CustomerQualifications.LastName LIKE N'%" + ReserverFamily + "%'";

if (!string.IsNullOrEmpty(RoomID))
strQuery += " AND tb_UnitManagement.AutoID =" + RoomID;

if (!string.IsNullOrEmpty(RoomType))
strQuery += " AND tb_UnitManagement.FK_UnitType =" + RoomType;

if (!string.IsNullOrEmpty(DateFrom))
if (!string.IsNullOrEmpty(DateTo))
{
strQuery += " AND tb_BusyRooms.DateFrom>" + DateFrom;
strQuery += " AND tb_BusyRooms.DateTo<" + DateTo;
}

SqlDataAdapter sqlAdp = new SqlDataAdapter(strQuery, connection.CnnString);
sqlAdp.Fill(dt);