PDA

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



مهدی نصیری
دوشنبه 02 بهمن 1391, 08:34 صبح
با سلام

من یک فرم برای جستجو دارم که شامل چهار تا تکس باک و یه گردید وی یو مشکلمن اینجاست کدی که

نوشتم باید هر چهار تا تکس باکس را پر کنم چی کار کنم اگر خواستم یکیشو یا دوتاشو یا همشو پر کنم.

ایا کامپونتی در ای باره هست که کارو راحت بکنه. برای خط اول کد باید چی کار کنم توی دستور همه قسمت

ها and شده اند.

کد:


string query = "select * from Books Where Book_Name Like @name and Nasher like @nasher and Nevisande Like @navisande and Motarjem Like @motarjem";
SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("@name", "%" + TextBox1.Text + "%");
cmd.Parameters.AddWithValue("@nasher", "%" + TextBox2.Text + "%");
cmd.Parameters.AddWithValue("@navisande", "%" + TextBox3.Text + "%");
cmd.Parameters.AddWithValue("@motarjem", "%" + TextBox4.Text + "%");
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
GridView1.DataSource = dr;
GridView1.DataBind();
if (dr.HasRows == false)
LMsg.Text = "موردي يافت نشد !";
else
LMsg.Text = GridView1.Rows.Count.ToString() + " مورد يافت شد ";
conn.Close();

taghi.km
دوشنبه 02 بهمن 1391, 09:31 صبح
فکر کنم اگه کدت رو به این شکل بنویسی مشکلت حل بشه
string query = "select * from Books Where ((@name is null) OR (Book_Name Like @name)) and ((@nasher is null) or (Nasher like @nasher)) and ((@navisande is null ) OR (Nevisande Like @navisande)) and ((@motarjem IS Null) OR (Motarjem Like @motarjem))";
SqlCommand cmd = new SqlCommand(query, conn);
if(String.IsNullOrEmpty(TextBox1.Text))
{
cmd.Parameters.AddWithValue("@name", DBNull.value);
}
else
{
cmd.Parameters.AddWithValue("@name", "%" + TextBox1.Text + "%");
}

if(String.IsNullOrEmpty(TextBox2.Text))
{
cmd.Parameters.AddWithValue("@nasher", DBNull.value);
}
else
{
cmd.Parameters.AddWithValue("@nasher", "%" + TextBox2.Text + "%");
}

if(String.IsNullOrEmpty(TextBox3.Text))
{
cmd.Parameters.AddWithValue("@navisande", DBNull.value);
}
else
{
cmd.Parameters.AddWithValue("@navisande", "%" + TextBox3.Text + "%");
}

if(String.IsNullOrEmpty(TextBox4.Text))
{
cmd.Parameters.AddWithValue("@motarjem", DBNull.value);
}
else
{
cmd.Parameters.AddWithValue("@motarjem", "%" + TextBox4.Text + "%");
}
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
GridView1.DataSource = dr;
GridView1.DataBind();
if (dr.HasRows == false)
LMsg.Text = "موردي يافت نشد !";
else
LMsg.Text = GridView1.Rows.Count.ToString() + " مورد يافت شد ";
conn.Close();

مهدی نصیری
دوشنبه 02 بهمن 1391, 10:38 صبح
دوست عزیز این کد جواب نمی دهد

مهدی نصیری
دوشنبه 02 بهمن 1391, 11:53 صبح
از دوستان برنامه نویس کسی نیست منو راهنمایی کنه.

مهدی نصیری
دوشنبه 02 بهمن 1391, 17:36 عصر
کسی نیست به من کمک کنه

taghi.km
دوشنبه 02 بهمن 1391, 17:41 عصر
چرا جواب نمیده سینتکس رو چک کن

na3er-faraji
دوشنبه 02 بهمن 1391, 20:37 عصر
دستور جستجو تون را باید به صورت پویا بنویسید یعنی با یک if چک کنید مثلا اگه textbox پر بود اون رو به آخر رشته جستجو اضافه کنید. میتونید از کد زیر الگو بگیرید. البته syntax ش با VB.NET هستش که زیاد فرقی نداره

Command = "Select * From Book"
If txtId.Text <> "" Then
Command = Command & " Where id=" & txtId.Text
End If
If chkBookName.Checked Then
If Command = "Select * From Book" Then
Command = Command & " Where BookName Like '%" & txtBookName.Text & "%'"
Else
Command = Command & " And BookName Like '%" & txtBookName.Text & "%'"
End If
End If

saeed_sho
سه شنبه 03 بهمن 1391, 09:42 صبح
اولا از استورد پروسیجر استفاده کن
استورد پروسیجرو اینطوری بنویس
create procedure [ss]
@s1 nvarchar(max)=null,
@s2 nvarchar(max)=null
as
begin
select * from table1
where field1 = isnull(@s1, field1)
and field2 = isnull(@s2, field2)
end

توی code behind شرط بزار اگه تکست باکس پر بود بفرست در غیر اینصورت به پارامتر null بفرست اینطوری
if (txts1.text.trim() <>string.empty)
{
cmd.parameters.addwithvalue("s1", txts1.text.trim());
}
else
{
cmd.parameters.addwithvalue("s1", null);
}
من یکیشو مثال زدم باید همه ی پارامترهارو اینطوری بفرستی