PDA

View Full Version : سوال: جستجو در سایت بر اساس فیلد های مورد نظر



mohsen.nsb44
یک شنبه 20 فروردین 1391, 12:30 عصر
سلام من تو بانکم یکسری از فیلدها دارم که میخوام بر اساس اونا جستجو انجام بدم مثلا جستجوی اعضای سایت
خب من در صفحه مورد نظر 5 تا عنصر به نام نام ، جنسیت ، تحصیلات ، استان ، شهر گزاشتم
حالا میخوام زمانی که کاربر فقط نام را وارد کرد فقط بر اساس نام جستجو بشه یا اگه تحصیلات رو وارد کرد فقط بر اساس تحصیلات جستجو بشه یا اگه هم استان و هم تحصیلات رو وارد کرد بر اساس هر دوی اینا جستجو انجام بشه
خب در این مسئله حالت های بسیار زیادی میتونه پیش بیاد
مثلا جنسیت و استان رو جستجو کنه یا جنسیت و تحصیلات رو و ....
پیشنهاد شما چیه؟
ایا میشه همه این حالات رو در یک استورپروسیجر جا داد؟

hamid_shrk
یک شنبه 20 فروردین 1391, 19:00 عصر
شما اینکار رو با استور پروسیجر میتونید انجام بدید.
ببینید وقتی فیلدهای شما از نوع nvarchar باشند این سرچ به راحتی و با like انجام میشه و برای فیلدهای رشته نیازی به شرط گذاشتن نیست مثلا وقتی :

SELECT * FROM Table WHERE Field1 LIKE @value AND Field2 LIKE @value2

در این حال حتی اگه یکی از فیلدها خالی باشه علنا بدون کاربرد میشه.

mohsen.nsb44
یک شنبه 20 فروردین 1391, 19:31 عصر
شما اینکار رو با استور پروسیجر میتونید انجام بدید.
ببینید وقتی فیلدهای شما از نوع nvarchar باشند این سرچ به راحتی و با like انجام میشه و برای فیلدهای رشته نیازی به شرط گذاشتن نیست مثلا وقتی :

SELECT * FROM Table WHERE Field1 LIKE @value AND Field2 LIKE @value2

در این حال حتی اگه یکی از فیلدها خالی باشه علنا بدون کاربرد میشه.
دوست عزیز من از این قبلا استفاده کردم اما جواب نمیده چرا که اگه یکی از فیلد ها خالی باشه ارور میده باید تمامی فیلد های مورد نظر در این حالت پر بشه در صورتی که من میخوام اگه فیلدی خالی بود بر اساس پر شده ها جستجو انجام بشه

hamid_shrk
یک شنبه 20 فروردین 1391, 19:51 عصر
شما چنانچه مقدار یک textbox رو به پروسیجرتون بفرستید و این textbox خالی باشه عبارت '' درون فیلد قرار میگیره که تو like بصورت خنثی عمل میکنه.

mohsen.nsb44
یک شنبه 20 فروردین 1391, 21:06 عصر
شما چنانچه مقدار یک textbox رو به پروسیجرتون بفرستید و این textbox خالی باشه عبارت '' درون فیلد قرار میگیره که تو like بصورت خنثی عمل میکنه.
پیشنهاد شما چیه؟

hamid_shrk
یک شنبه 20 فروردین 1391, 21:10 عصر
همینه که گفتم دیگه..


شما چنانچه مقدار یک textbox رو به پروسیجرتون بفرستید و این textbox خالی باشه عبارت '' درون فیلد قرار میگیره که تو like بصورت خنثی عمل میکنه.

mohsen.nsb44
یک شنبه 20 فروردین 1391, 22:00 عصر
همینه که گفتم دیگه..
دوست عزیز تست کردم جواب نداد ارور زیر رو میده
No mapping exists from object type System.Web.UI.WebControls.ListItem to a known managed provider native type.

hamid_shrk
یک شنبه 20 فروردین 1391, 22:19 عصر
ورودی های استور پروسیجرتون رو چطوری مقداردهی کردین؟
منظورم کدتونه

mohsen.nsb44
یک شنبه 20 فروردین 1391, 22:24 عصر
ورودی های استور پروسیجرتون رو چطوری مقداردهی کردین؟
منظورم کدتونه
به صورت زیر



cmd.Parameters.AddWithValue("@Name", this.txtName.Text);

hamid_shrk
یک شنبه 20 فروردین 1391, 22:34 عصر
تو خطایی که داده گفته :
System.Web.UI.WebControls.ListItem
این خطا رو کجای کدتون داده؟میشه کل کد مربوط به insert رو بذارید ؟

mohsen.nsb44
یک شنبه 20 فروردین 1391, 22:40 عصر
تو خطایی که داده گفته :
System.Web.UI.WebControls.ListItem
این خطا رو کجای کدتون داده؟میشه کل کد مربوط به insert رو بذارید ؟
کد زیر رو نوشتم





SqlConnection con = new SqlConnection();
con.ConnectionString = System.Configuration.ConfigurationManager.Connecti onStrings["connectionstring"].ConnectionString;
SqlCommand cmd = new SqlCommand("search", con);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("@Name", this.txtName.Text);
cmd.Parameters.AddWithValue("@sex",DSex.SelectedItem.Text);
cmd.Parameters.AddWithValue("@ostan",txtOstan.Text);
cmd.Parameters.AddWithValue("@shahr", txtShahr.Text);
cmd.Parameters.AddWithValue("@tahsilat",DTahsilat.SelectedItem);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
DataList1.DataBind();

hamid_shrk
یک شنبه 20 فروردین 1391, 23:14 عصر
مشکل یا از این خط هست :

cmd.Parameters.AddWithValue("@sex",DSex.SelectedIt em.Text);

یا این :

cmd.Parameters.AddWithValue("@tahsilat",DTahsilat. SelectedItem);

مقدارش رو اول بریزید تو یک متغیر با break point ببینید چی توشه.؟

mohsen.nsb44
یک شنبه 20 فروردین 1391, 23:18 عصر
مشکل یا از این خط هست :

cmd.Parameters.AddWithValue("@sex",DSex.SelectedIt em.Text);

یا این :

cmd.Parameters.AddWithValue("@tahsilat",DTahsilat. SelectedItem);

مقدارش رو اول بریزید تو یک متغیر با break point ببینید چی توشه.؟
دوست عزیز من این گزینه ها رو انتخاب میکنم بدون لایک با مساوی اگه همه گزینه ها پر بشه کار میکنه اما با لایک نمیکنه انگار که هیچی ارسال نمیشه

hamid_shrk
یک شنبه 20 فروردین 1391, 23:27 عصر
ببینید من همیشه اینجوری سرچ رو مینویسم/شما تو استور باید این شرط ها رو بذارید ، به سرچ زیر دقت کنید ، (تست شده کد):

@name nvarchar(max),
@city nvarchar(max),
@typeSend nvarchar(max),
@typePayment nvarchar(max)
AS
BEGIN
IF (@name='0')
SET @name=''
IF (@city='0')
SET @city=''
IF (@typeSend='0')
SET @typeSend=''
IF (@typePayment='0')
SET @typePayment=''

SET @name='%'+@name+'%'
SET @city='%'+@city+'%'
SET @typeSend='%'+@typeSend+'%'
SET @typePayment='%'+@typePayment+'%'
SELECT Sales.*,Human.* FROM sales LEFT JOIN Human ON
Sales.idHumanFK=Human.idHuman WHERE
[name] LIKE @name AND city LIKE @city AND typeSend LIKE @typeSend AND typePayment LIKE @typePayment
ORDER BY date DESC
END


نکته کوئری اینه که من بررسی میکنم تو کد بیهاین در صورتی که هر گزینه (تکست باکس یا دراپ دان) خالی باشه بجاش 0 میفرستم به استور پروسیجر.

Saman Hashemi
دوشنبه 21 فروردین 1391, 09:50 صبح
شاید این لینک (http://samanhashemi.ir/?p=61)هم بتونه کمکت کنه...!

mohsen.nsb44
جمعه 22 اردیبهشت 1391, 12:30 عصر
شاید این لینک (http://samanhashemi.ir/?p=61)هم بتونه کمکت کنه...!
دوست عزیز از لینکی که معرفی کردین استفاده کردم
در گریدویو قسمت test query درست جواب میگیرم
اما کدی که برای نمایش نوشتم کار نکرد و چیزی بهم نشون نمیده

mohsen.nsb44
جمعه 22 اردیبهشت 1391, 12:33 عصر
کدی که برای نمایش نوشتم به صورت زیره


SqlConnection con = new SqlConnection();
con.ConnectionString = System.Configuration.ConfigurationManager.Connecti onStrings["connectionstring"].ConnectionString;
SqlCommand cmd = new SqlCommand("search", con);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("@fullName", this.txtName.Text);
cmd.Parameters.AddWithValue("@gender",DropDownList1.selectedValue);
cmd.Parameters.AddWithValue("@ostan", this.txtOstan.Text);
cmd.Parameters.AddWithValue("@shahr", txtShahr.Text);

con.Open();
cmd.ExecuteNonQuery();

DataList1.DataBind();
con.Close();

fakhravari
شنبه 03 تیر 1391, 12:26 عصر
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
DataList1.DataSource= dt ;
DataList1.DataBind();

mohsen.nsb44
شنبه 03 تیر 1391, 12:34 عصر
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
DataList1.DataSource= dt ;
DataList1.DataBind();

کد هارو به صورت زیر تغییر دادم اما اتفاقی نمیوفته وقتی عمل جستجو انجام میشه



SqlConnection con = new SqlConnection();
con.ConnectionString = System.Configuration.ConfigurationManager.Connecti onStrings["connectionstring"].ConnectionString;
SqlCommand cmd = new SqlCommand("S_search", con);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("@fullName", this.txtName.Text);
cmd.Parameters.AddWithValue("@gender", null);
cmd.Parameters.AddWithValue("@ostan", this.txtOstan.Text);
cmd.Parameters.AddWithValue("@shahr", txtShahr.Text);
cmd.Parameters.AddWithValue("@tahsilat",null);
con.Open();
//cmd.ExecuteNonQuery();
//DataList1.DataSource = cmd.ExecuteReader();
//DataList1.DataBind();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
DataList1.DataSource = dt;
DataList1.DataBind();
con.Close();
//cmd.Connection.Open();

//cmd.Connection.Close();


امکانش هست زحمت بکشین خودتون یک نمونه برنامه برای دانلود بزارین؟

mohsen.nsb44
شنبه 03 تیر 1391, 13:09 عصر
مشکل با تغییر کد زیر حل شد


SqlConnection con = new SqlConnection();
con.ConnectionString = System.Configuration.ConfigurationManager.Connecti onStrings["connectionstring"].ConnectionString;
SqlCommand cmd = new SqlCommand("S_search", con);
cmd.CommandType = CommandType.StoredProcedure;
if (txtName.Text == "")
{
cmd.Parameters.AddWithValue("@fullName",null);
}
else if (txtName.Text != "")
{
cmd.Parameters.AddWithValue("@fullName", this.txtName.Text);
}
if (DSex.SelectedValue == "")
{
cmd.Parameters.AddWithValue("@gender",null);
}
else if (DSex.SelectedValue != "")
{
cmd.Parameters.AddWithValue("@gender", DSex.SelectedValue.Trim().ToString());
}
if (txtOstan.Text == "")
{
cmd.Parameters.AddWithValue("@ostan", null);
}
else if (txtOstan.Text != "")
{
cmd.Parameters.AddWithValue("@ostan", this.txtOstan.Text);
}
if (txtShahr.Text == "")
{
cmd.Parameters.AddWithValue("@shahr",null);
}
else if (txtShahr.Text != "")
{
cmd.Parameters.AddWithValue("@shahr", txtShahr.Text);
}
if (DTahsilat.SelectedValue == "")
{
cmd.Parameters.AddWithValue("@tahsilat", null);
}
else if (DTahsilat.SelectedValue != "")
{
cmd.Parameters.AddWithValue("@tahsilat",DTahsilat.SelectedValue.Trim().ToString());
}
con.Open();
//cmd.ExecuteNonQuery();
//DataList1.DataSource = cmd.ExecuteReader();
//DataList1.DataBind();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
DataList1.DataSource = dt;
DataList1.DataBind();
con.Close();
//cmd.Connection.Open();

//cmd.Connection.Close();