جستجو در بانک اطلاعاتی :
یکی از پر کاربرد ترین بخش های هر سایتی ، بخش جستجو سایت می باشد.
جستجو در سایت بدلیل کاهش زمان کاربر در رسیدن به هدف بسیار مهم است ، از آنجایی که امروزه قریب به اتفاق سایت های پویا از بانک های اطلاعاتی استفاده می کنند و مطالب و محتویات سایت را داخل این بانک های اطلاعاتی قرار میدهند مبحث جستجو در بانک های اطلاعاتی اهمیت قابل توجهی پیدا کرده است.
خوب فرض کنید یک ثبت نام اینترنتی انجام داده اید! و از هر کاربر 1 سوال در مورد علایق او پرسیده اید و اطلاعات زیر را ثبت کرده اید !
1- نام و نام خانوادگی
2- علایق شخص
و این اطلاعات را داخل یک جدول بانک اطلاعاتی SQL Server 2005 به نام Search ذخیره کرده اید ! و قصد دارید از اطلاعات جمع آوری کرده استفاده کنید .
بنابراین جدول بانک اطلاعاتی شما دارای 3 ستون به شرح زیر می باشد :
1- UserID : کد کاربر ( که بصورت خود کار داده می شود )
2- UserFamily : نام و نام خانوادگی کاربر
3- UserAnswer : پاسخ کاربر به سوال پرسیده شده
خوب اسم این جدول را TblUSers می گذاریم .
بنابراین اکنون یک دیتابیس به نام Search به همراه یک جدول به نام TblUsers در اختیار داریم :
خوب حالا چند رکورد برای تست وارد این جدول کنید !
جستجو در بانک اطلاعاتی چیزی نیست جز یک عمل Select که به همراه یک شرط و کلید واژه Like به کار می رود .
فرض کنید می خواهید تمامی رکورد های جدول بانک اطلاعاتی را فراخوانی کنید به شرطی که نام کاربر “دلشاد” باشد ! برای اینکار دستور Sql زیر را می نوشتیم
Select * From TblUsers Where UserFamily=N'دلشاد'
و از کاراکتر N به منظور شناسایی کارکتر های Unicode استفاده می کردیم.
عمل فوق تنها رکوردی را برای ما بر میگرداند که ستون UserFamily در آن دقیقا "دلشاد" باشد و اگر داخل بانک رکوردی به نام "علی دلشاد" وجود داشته باشد دستور فوق آنرا بر نمی گرداند.
بدین منظور است که از کلید واژه Like به همراه کارکتر های % استفاده می کنیم :
Select * From TblUsers Where UserFamily Like N'%دلشاد%'
کاراکتر % در سمت چپ و راست کلمه "دلشاد" به SQL Server می گوید که کاربر قصد جستجوی کلمه دلشاد را دارد و چون هم قبل و هم بعد آن % وجود دارد بدین معنی است که ما اهمیتی نمی دهیم که قبل و بعد از کلمه دلشاد چه کاراکتر هایی موجود است فقط کافیست آن رکورد کلمه "دلشاد" را شامل باشد .
نکته جالب اینجاست که اگر از کاراکتر های % استفاده نکنید ، کلید واژه Like دقیقا مانند عملگر "=" عمل خواهد کرد ( با توجه به گفته بالا کاملا منطقی به نظر میرسد )
با توجه به نکات فوق قصد داریم یک جستجو در این جدول توسط Asp.NET و به زبان C# انجام دهیم .
برای اینکار ابتدا نرم افزار ویژوال استودیو دات نت را باز کرده و یک پروژه جدید به نام Search می سازیم.
داخل صفحه Default.aspx شده و یک کنترل Gridview به نام Grv_Search، یک Textboxبه نام Txt_Search و یک باتن به نام Btn_Submit به صفحه اضافه می کنیم.
وارد CodeBehind ابتدا کتابخانه های زیر را پیوست می کنیم :
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
میخواهیم یک جستجوی ساده بنویسیم به این صورت که کاربر کلمه کلیدی خود را داخل TextBox وارد کرده و پس از اینکه کلید جستجو را فشرد تمامی رکورد هایی که شامل کلمه کلیدی هستند داخل GridView نمایش می یابند .
بدین منظور زیر روال BindGridview را بصورت زیر تعریف می کنیم :
using (SqlConnection Con = new SqlConnection("Data Source=(local);Initial Catalog=search;Integrated Security=SSPI;"))
{
string SqlStr = "Select * From TblUsers Where UserAnswer Like N'%'+@KeyWord+'%'";
SqlCommand Cmd = new SqlCommand(SqlStr, Con);
Cmd.Parameters.AddWithValue("@KeyWord", KeyWord);
Con.Open();
Grv_Search.DataSource = Cmd.ExecuteReader();
Grv_Search.DataBind();
Con.Close();
}
در زیر روال فوق پس از اتصال به بانک و اجرای دستور دلخواه که توضیح دادم ، Gridview را بایند می کنیم .
در اینجا من از ExecuteReader بصورت مستقیم استفاده کردم ، شما میتوانید از دیتاست ، ObjectDataSource و... استفاده کنید !
دستور Select را طوری نوشتم که داخل ستون UserAnswer هر کلمه کلیدی را جستجو نماید . کلمه کلیدی نیز به این دستور بصورت پارامتر @KeyWord پاس می شود.
خوب در روال مربوط به رویداد کلیک شدن Btn_Submit به این صورت می نویسیم :
BindGridview(Txt_Search.Text);
کار تمام است میتوانید جستجو را تست کنید .
فایل پروژه را میتوانید از این لینک دانلود کنید :
http://how2learnasp.net/Projects/search.rar