PDA

View Full Version : این MultiSelect ، اینحوری درسته !



merlin_vista
سه شنبه 30 بهمن 1386, 15:47 عصر
با سلام :
آقا من چندتا TextBox و ChekBox دارم میخواهم هر کدام که پر شد فیلتر من روی بانک برای همان اعمال شود و در نتیجه تصمیم گرفتم که اینجوری یه Select پویا بنویسم که ینا به شرت های گزاشته شده تغییر کنه :متفکر: ولی در کار خطا میگیره (Synax Eror ) . در ضمن اگه وقت دارید AND , OR هایش را هم برام درست کنید که هر کدام که باشه بیاره تو هر رکورد :ناراحت:

امیدوارم منظور من را فهمیده باشید :متفکر:

ممنون :قلب:


private string MultiSelect()
{
string sqlSelect = "select * From Sell Where ";
//قسمت چک باکسهای نوع ملک
//chk_All
if (this.chk_All.Checked == true)
{
this.Chk_Anbar_Garaje.Checked = false;
this.chk_Aparteman.Checked = false;
this.chk_Baghe.Checked = false;
this.chk_Home.Checked = false;
this.chk_Kargah.Checked = false;
this.chk_Karkhane.Checked = false;
this.chk_Maghaze.Checked = false;
this.chk_Office.Checked = false;
this.chk_Zamin.Checked = false;
}
//
if (this.chk_Home.Checked == true)
sqlSelect += "Malke=1 OR ";

if(this.chk_Aparteman.Checked==true)
sqlSelect += "Malke=2 OR ";

if(this.chk_Office.Checked==true)
sqlSelect += "Malke=3 OR ";

if(this.chk_Maghaze.Checked==true)
sqlSelect += "Malke=4 OR ";

if (this.chk_Baghe.Checked == true)
sqlSelect += "Malke=5 OR ";

if (this.Chk_Anbar_Garaje.Checked == true)
sqlSelect += "Malke=6 OR ";

if (this.chk_Kargah.Checked == true)
sqlSelect += "Malke=7 OR ";

if (this.chk_Karkhane.Checked == true)
sqlSelect += "Malke=8 OR ";

if (this.chk_Zamin.Checked == true)
sqlSelect += "Malke=9 OR ";
//

//Text Box : :
if (this.TextBox1.Text != "")
sqlSelect += " mantaghe=" + this.TextBox1.Text + " AND ";

if (this.TextBox10.Text != "")
sqlSelect += " Mogheyat Like " + this.TextBox10.Text + " AND";

if (this.TextBox5.Text != "")
{
//محاسبات
int inp = Convert.ToInt32(this.TextBox5.Text.ToString());
int avg = inp / 4;
int min = inp - avg;
int max = avg + inp;
//

sqlSelect += " Mogheyat (BETWEEN " + min.ToString() + " AND " + max.ToString() + " ) AND";
}

if(this.TextBox8.Text != "")
{
//محاسبات
long inp2 =long.Parse(this.TextBox8.Text.ToString());
long avg2 = inp2 / 4;
long min2 = inp2 - avg2;
long max2 = avg2 + inp2;
//
sqlSelect += " PriseMetr (BETWEEN " + min2.ToString() + " AND " + max2.ToString() + " ) AND";
}

if (this.TextBox9.Text != "")
{
//محاسبات
long inp3 = long.Parse(this.TextBox9.Text.ToString());
long avg3 = inp3 / 4;
long min3 = inp3 - avg3;
long max3 = avg3 + inp3;
//
sqlSelect += " AllMeter (BETWEEN " + min3.ToString() + " AND " + max3.ToString() + " ) AND";
}

if (this.TextBox6.Text != "")
{
//محاسبات
long inp4 = long.Parse(this.TextBox6.Text.ToString());
long avg4 = inp4 / 4;
long min4 = inp4 - avg4;
long max4 = avg4 + inp4;
//
sqlSelect += " MetrajMofid (BETWEEN " + min4.ToString() + " AND " + max4.ToString() + " ) AND";

}

if (this.TextBox11.Text != "")
sqlSelect += " Ghedmat Like " + this.TextBox11.Text + " '%' AND";

if(this.TextBox2.Text!="")
sqlSelect += " Adress Like " + this.TextBox2.Text + " '%' AND";

if(this.TextBox3.Text!="")
sqlSelect += " adressTow Like " + this.TextBox3.Text + " '%' AND";

if (this.TextBox4.Text != "")
{
//محاسبات
long inp5 = long.Parse(this.TextBox4.Text.ToString());
long avg5 = inp5 / 4;
long min5 = inp5 - avg5;
long max5 = avg5 + inp5;
//
sqlSelect += " MetrajZamin (BETWEEN " + min5.ToString() + " AND " + max5.ToString() + " ) AND";
}

if(this.TextBox7.Text!="")
sqlSelect += "TedadOtagh=" + int.Parse(this.TextBox7.Text) + " AND ";
//

return sqlSelect+" 1=1";
}

e-shahshahani
سه شنبه 30 بهمن 1386, 18:30 عصر
یه کلاس و کد نحوه استفاده از کلاس.
من توی یه پروژه از این استفاده کردم و خوب جواب داده.
سوال داشتی بپرس.

کلاس :

using System;
using System.Data;

public enum Operator
{
EqualTo = 1,
NotEqualTo = 2,
Like = 3,
Between = 4,
NotBetween = 5,
LessThan = 6,
LessThanOrEqualTo = 7,
GreaterThan = 8,
GreaterThanOrEqualTo = 9
} ;

public enum FieldType
{
Number,
String
} ;

public enum SqlType
{
SelectOnly,
UpdateData,
Delete
} ;

public class SqlBuilder
{
private string _sqlWhere;
private readonly SqlType _sqlType;

public string SQL
{
get { return _sqlWhere; }
}

public SqlType SqlType
{
get { return _sqlType; }
}

// سازنده کلاس
public SqlBuilder(SqlType SqlType)
{
_sqlType = SqlType;
_sqlWhere = "";
}

// یک شرط مستقل
public void AddCondition(Operator op, FieldType FieldType, string FieldName, string FieldValue1, string FieldValue2)
{
string newSql;
string q1 = "", q2 = "";

if (FieldType == FieldType.String)
{
q1 = "N'";
q2 = "'";
}

if (Operator.Between == op)
{
newSql = string.Format("{2} BETWEEN {0}{3}{1} and {0}{4}{1}", q1, q2, FieldName, FieldValue1, FieldValue2);
}
else if (Operator.NotBetween == op)
{
newSql = string.Format("{2} NOT BETWEEN {0}{3}{1} and {0}{4}{1}", q1, q2, FieldName, FieldValue1, FieldValue2);
}
else if (Operator.EqualTo == op)
{
newSql = string.Format("{2} = {0}{3}{1}", q1, q2, FieldName, FieldValue1);
}
else if (Operator.NotEqualTo == op)
{
newSql = string.Format("{2} != {0}{3}{1}", q1, q2, FieldName, FieldValue1);
}
else if (Operator.Like == op)
{
if (FieldType.String != FieldType)
throw new InvalidOperationException("Like Operator Is Valid Only With String DataType!");
newSql = string.Format("{0} LIKE N'%{1}%'", FieldName, FieldValue1);
}
else if (Operator.LessThan == op)
{
newSql = string.Format("{2} < {0}{3}{1}", q1, q2, FieldName, FieldValue1);
}
else if (Operator.LessThanOrEqualTo == op)
{
newSql = string.Format("{2} <= {0}{3}{1}", q1, q2, FieldName, FieldValue1);
}
else if (Operator.GreaterThan == op)
{
newSql = string.Format("{2} > {0}{3}{1}", q1, q2, FieldName, FieldValue1);
}
else if (Operator.GreaterThanOrEqualTo == op)
{
newSql = string.Format("{2} >= {0}{3}{1}", q1, q2, FieldName, FieldValue1);
}
else
{
throw new IndexOutOfRangeException("Invalid Operator !");
}

if (_sqlWhere != "")
_sqlWhere += " AND ";
_sqlWhere += newSql;

}

// چند شرط که با یکدیگر "یا" می شوند
// در صورتی که یک فیلد یکی از چند مقدار خواسته شده را داشته باشد
public void AddCondition(FieldType FieldType, string FieldName, string[] FieldValues)
{
if (0 == FieldValues.Length)
return;

string newSql = "";
for (int i = 0; i < FieldValues.Length; i++)
{
string fieldValue = FieldValues[i].Trim();
if ("" != fieldValue)
{
newSql += string.Format(" {0} = {1} ", FieldName, fieldValue);
if (i != FieldValues.Length - 1)
newSql += " OR ";
}
}

if (newSql != "")
newSql = string.Format("({0})", newSql);

if (_sqlWhere != "")
_sqlWhere += " AND ";
_sqlWhere += newSql;
}

// شرط دینامیک
public void AddCondition(string sql)
{
if (_sqlWhere != "")
_sqlWhere += " AND ";
_sqlWhere += string.Format(" {0} ", sql);
}


public static string GetOperatorName(Operator Operator)
{
if (Operator == Operator.Between)
return "between";
else if (Operator == Operator.NotBetween)
return "not between";
else if (Operator == Operator.Like)
return "like";
else if (Operator == Operator.EqualTo)
return "equal to";
else if (Operator == Operator.NotEqualTo)
return "not equal to";
else if (Operator == Operator.GreaterThan)
return "greater than";
else if (Operator == Operator.GreaterThanOrEqualTo)
return "greater than or equal to";
else if (Operator == Operator.LessThan)
return "less than";
else if (Operator == Operator.LessThanOrEqualTo)
return "greater than or equal to";
else
throw new IndexOutOfRangeException();
}

public static DataTable GetOperatorList(bool UseNeutralMember, string NeutralMember)
{
DataTable dt = new DataTable();
dt.Columns.Add("OperatorId", typeof(int));
dt.Columns.Add("OperatorName", typeof(string));

if (UseNeutralMember)
{
DataRow dr0 = dt.NewRow();
dr0["OperatorId"] = 0;
dr0["OperatorName"] = NeutralMember;
dt.Rows.Add(dr0);
}

dt.Rows.Add(GetOperator(Operator.Between, dt));
dt.Rows.Add(GetOperator(Operator.NotBetween, dt));
dt.Rows.Add(GetOperator(Operator.Like, dt));
dt.Rows.Add(GetOperator(Operator.EqualTo, dt));
dt.Rows.Add(GetOperator(Operator.NotEqualTo, dt));
dt.Rows.Add(GetOperator(Operator.GreaterThan, dt));
dt.Rows.Add(GetOperator(Operator.GreaterThanOrEqua lTo, dt));
dt.Rows.Add(GetOperator(Operator.LessThan, dt));
dt.Rows.Add(GetOperator(Operator.LessThanOrEqualTo , dt));

return dt;
}

private static DataRow GetOperator(Operator op, DataTable parent)
{
DataRow dr = parent.NewRow();
dr["OperatorId"] = (int)op;
dr["OperatorName"] = GetOperatorName(op);
return dr;
}
}



مثال :


SqlBuilder sb = new SqlBuilder(SqlType.SelectOnly);

if ("-1" != ddlAccountStatus.SelectedValue)
sb.AddCondition(Operator.EqualTo, FieldType.Number, "a.Status", ddlAccountStatus.SelectedValue, "");

if ("-1" != ddlAccountType.SelectedValue)
sb.AddCondition(Operator.EqualTo, FieldType.Number, "a.Type", ddlAccountType.SelectedValue, "");

if ("0" != ddlOpCash.SelectedValue)
{
sb.AddCondition((Operator)int.Parse(ddlOpCash.Sele ctedValue), FieldType.Number,
"a.Cash", txtCash1.Text.Trim(), txtCash2.Text.Trim());
}

if ("0" != ddlOpAvailableCash.SelectedValue)
{
sb.AddCondition((Operator)int.Parse(ddlOpAvailable Cash.SelectedValue), FieldType.Number,
"a.AvailableCash", txtAvailableCash1.Text.Trim(), txtAvailableCash2.Text.Trim());
}

string date1 = "";
if (!dpDate1.IsEmpty)
date1 = dpDate1.SelectedDate.Value.ToShortDateString();
string date2 = "";
if (!dpDate2.IsEmpty)
date2 = dpDate2.SelectedDate.Value.AddDays(1).ToShortDateS tring();

if ((date1 != "") && ((date2 != "")))
{
sb.AddCondition(Operator.Between, FieldType.String, "a.CreationDate", date1, date2);
}
else if ((date1 != "") && ((date2 == "")))
{
sb.AddCondition(Operator.GreaterThanOrEqualTo, FieldType.String, "a.CreationDate", date1, "");
}
else if ((date1 == "") && ((date2 != "")))
{
sb.AddCondition(Operator.LessThanOrEqualTo, FieldType.String, "a.CreationDate", date2, "");
}

DataTable dtSearch2 = Accounts.SearchAccounts(sb.SQL);

ادامه ...

merlin_vista
سه شنبه 30 بهمن 1386, 21:50 عصر
یه کلاس و کد نحوه استفاده از کلاس.
من توی یه پروژه از این استفاده کردم و خوب جواب داده.
سوال داشتی بپرس.

کلاس :

using System;
using System.Data;

public enum Operator
{
EqualTo = 1,
NotEqualTo = 2,
Like = 3,
Between = 4,
NotBetween = 5,
LessThan = 6,
LessThanOrEqualTo = 7,
GreaterThan = 8,
GreaterThanOrEqualTo = 9
} ;

public enum FieldType
{
Number,
String
} ;

public enum SqlType
{
SelectOnly,
UpdateData,
Delete
} ;

public class SqlBuilder
{
private string _sqlWhere;
private readonly SqlType _sqlType;

public string SQL
{
get { return _sqlWhere; }
}

public SqlType SqlType
{
get { return _sqlType; }
}

// سازنده کلاس
public SqlBuilder(SqlType SqlType)
{
_sqlType = SqlType;
_sqlWhere = "";
}

// یک شرط مستقل
public void AddCondition(Operator op, FieldType FieldType, string FieldName, string FieldValue1, string FieldValue2)
{
string newSql;
string q1 = "", q2 = "";

if (FieldType == FieldType.String)
{
q1 = "N'";
q2 = "'";
}

if (Operator.Between == op)
{
newSql = string.Format("{2} BETWEEN {0}{3}{1} and {0}{4}{1}", q1, q2, FieldName, FieldValue1, FieldValue2);
}
else if (Operator.NotBetween == op)
{
newSql = string.Format("{2} NOT BETWEEN {0}{3}{1} and {0}{4}{1}", q1, q2, FieldName, FieldValue1, FieldValue2);
}
else if (Operator.EqualTo == op)
{
newSql = string.Format("{2} = {0}{3}{1}", q1, q2, FieldName, FieldValue1);
}
else if (Operator.NotEqualTo == op)
{
newSql = string.Format("{2} != {0}{3}{1}", q1, q2, FieldName, FieldValue1);
}
else if (Operator.Like == op)
{
if (FieldType.String != FieldType)
throw new InvalidOperationException("Like Operator Is Valid Only With String DataType!");
newSql = string.Format("{0} LIKE N'%{1}%'", FieldName, FieldValue1);
}
else if (Operator.LessThan == op)
{
newSql = string.Format("{2} < {0}{3}{1}", q1, q2, FieldName, FieldValue1);
}
else if (Operator.LessThanOrEqualTo == op)
{
newSql = string.Format("{2} <= {0}{3}{1}", q1, q2, FieldName, FieldValue1);
}
else if (Operator.GreaterThan == op)
{
newSql = string.Format("{2} > {0}{3}{1}", q1, q2, FieldName, FieldValue1);
}
else if (Operator.GreaterThanOrEqualTo == op)
{
newSql = string.Format("{2} >= {0}{3}{1}", q1, q2, FieldName, FieldValue1);
}
else
{
throw new IndexOutOfRangeException("Invalid Operator !");
}

if (_sqlWhere != "")
_sqlWhere += " AND ";
_sqlWhere += newSql;

}

// چند شرط که با یکدیگر "یا" می شوند
// در صورتی که یک فیلد یکی از چند مقدار خواسته شده را داشته باشد
public void AddCondition(FieldType FieldType, string FieldName, string[] FieldValues)
{
if (0 == FieldValues.Length)
return;

string newSql = "";
for (int i = 0; i < FieldValues.Length; i++)
{
string fieldValue = FieldValues[i].Trim();
if ("" != fieldValue)
{
newSql += string.Format(" {0} = {1} ", FieldName, fieldValue);
if (i != FieldValues.Length - 1)
newSql += " OR ";
}
}

if (newSql != "")
newSql = string.Format("({0})", newSql);

if (_sqlWhere != "")
_sqlWhere += " AND ";
_sqlWhere += newSql;
}

// شرط دینامیک
public void AddCondition(string sql)
{
if (_sqlWhere != "")
_sqlWhere += " AND ";
_sqlWhere += string.Format(" {0} ", sql);
}


public static string GetOperatorName(Operator Operator)
{
if (Operator == Operator.Between)
return "between";
else if (Operator == Operator.NotBetween)
return "not between";
else if (Operator == Operator.Like)
return "like";
else if (Operator == Operator.EqualTo)
return "equal to";
else if (Operator == Operator.NotEqualTo)
return "not equal to";
else if (Operator == Operator.GreaterThan)
return "greater than";
else if (Operator == Operator.GreaterThanOrEqualTo)
return "greater than or equal to";
else if (Operator == Operator.LessThan)
return "less than";
else if (Operator == Operator.LessThanOrEqualTo)
return "greater than or equal to";
else
throw new IndexOutOfRangeException();
}

public static DataTable GetOperatorList(bool UseNeutralMember, string NeutralMember)
{
DataTable dt = new DataTable();
dt.Columns.Add("OperatorId", typeof(int));
dt.Columns.Add("OperatorName", typeof(string));

if (UseNeutralMember)
{
DataRow dr0 = dt.NewRow();
dr0["OperatorId"] = 0;
dr0["OperatorName"] = NeutralMember;
dt.Rows.Add(dr0);
}

dt.Rows.Add(GetOperator(Operator.Between, dt));
dt.Rows.Add(GetOperator(Operator.NotBetween, dt));
dt.Rows.Add(GetOperator(Operator.Like, dt));
dt.Rows.Add(GetOperator(Operator.EqualTo, dt));
dt.Rows.Add(GetOperator(Operator.NotEqualTo, dt));
dt.Rows.Add(GetOperator(Operator.GreaterThan, dt));
dt.Rows.Add(GetOperator(Operator.GreaterThanOrEqua lTo, dt));
dt.Rows.Add(GetOperator(Operator.LessThan, dt));
dt.Rows.Add(GetOperator(Operator.LessThanOrEqualTo , dt));

return dt;
}

private static DataRow GetOperator(Operator op, DataTable parent)
{
DataRow dr = parent.NewRow();
dr["OperatorId"] = (int)op;
dr["OperatorName"] = GetOperatorName(op);
return dr;
}
}

مثال :


SqlBuilder sb = new SqlBuilder(SqlType.SelectOnly);

if ("-1" != ddlAccountStatus.SelectedValue)
sb.AddCondition(Operator.EqualTo, FieldType.Number, "a.Status", ddlAccountStatus.SelectedValue, "");

if ("-1" != ddlAccountType.SelectedValue)
sb.AddCondition(Operator.EqualTo, FieldType.Number, "a.Type", ddlAccountType.SelectedValue, "");

if ("0" != ddlOpCash.SelectedValue)
{
sb.AddCondition((Operator)int.Parse(ddlOpCash.Sele ctedValue), FieldType.Number,
"a.Cash", txtCash1.Text.Trim(), txtCash2.Text.Trim());
}

if ("0" != ddlOpAvailableCash.SelectedValue)
{
sb.AddCondition((Operator)int.Parse(ddlOpAvailable Cash.SelectedValue), FieldType.Number,
"a.AvailableCash", txtAvailableCash1.Text.Trim(), txtAvailableCash2.Text.Trim());
}

string date1 = "";
if (!dpDate1.IsEmpty)
date1 = dpDate1.SelectedDate.Value.ToShortDateString();
string date2 = "";
if (!dpDate2.IsEmpty)
date2 = dpDate2.SelectedDate.Value.AddDays(1).ToShortDateS tring();

if ((date1 != "") && ((date2 != "")))
{
sb.AddCondition(Operator.Between, FieldType.String, "a.CreationDate", date1, date2);
}
else if ((date1 != "") && ((date2 == "")))
{
sb.AddCondition(Operator.GreaterThanOrEqualTo, FieldType.String, "a.CreationDate", date1, "");
}
else if ((date1 == "") && ((date2 != "")))
{
sb.AddCondition(Operator.LessThanOrEqualTo, FieldType.String, "a.CreationDate", date2, "");
}

DataTable dtSearch2 = Accounts.SearchAccounts(sb.SQL);

ادامه ...

ممنون از لطف شما دوست عزیز :بوس::قلب:
ولی اگه کسی بتونه کد من را درست کنه ممنون میشم:بوس:

e-shahshahani
چهارشنبه 01 اسفند 1386, 07:08 صبح
چند تا نکته :
1. برای مقایسه متن، باید آن متن را داخل یک جفت ' قرار دهید. چه مقایسه = باشد و چه like باشد.
2. این غلطه : (x (BETWEEN 20 AND 24. این درسته : (x BETWEEN 20 AND 24)

اینم کد. فقط تست نکردم!!!! اگه مشکلی داشت احتمالا پرانتزی، گیومه ای چیزی درست نیست. اگه درست نشد صفحه aspx و کد آن را ضمیمه کم تا بتونم تست کنم!

private string MultiSelect()
{
string sql0 = "select * From Sell ";
string sqlSelect = "";
//قسمت چک باکسهای نوع ملک
//chk_All
if (this.chk_All.Checked == true)
{
this.Chk_Anbar_Garaje.Checked = false;
this.chk_Aparteman.Checked = false;
this.chk_Baghe.Checked = false;
this.chk_Home.Checked = false;
this.chk_Kargah.Checked = false;
this.chk_Karkhane.Checked = false;
this.chk_Maghaze.Checked = false;
this.chk_Office.Checked = false;
this.chk_Zamin.Checked = false;
}
//

string sql = "";
if (this.chk_Home.Checked == true)
sql += "Malke=1 OR ";

if (this.chk_Aparteman.Checked == true)
sql += "Malke=2 OR ";

if (this.chk_Office.Checked == true)
sql += "Malke=3 OR ";

if (this.chk_Maghaze.Checked == true)
sql += "Malke=4 OR ";

if (this.chk_Baghe.Checked == true)
sql += "Malke=5 OR ";

if (this.Chk_Anbar_Garaje.Checked == true)
sql += "Malke=6 OR ";

if (this.chk_Kargah.Checked == true)
sql += "Malke=7 OR ";

if (this.chk_Karkhane.Checked == true)
sql += "Malke=8 OR ";

if (this.chk_Zamin.Checked == true)
sql += "Malke=9 OR ";
//

//Text Box : :
if (this.TextBox1.Text != "")
sqlSelect += " mantaghe='" + this.TextBox1.Text + "' AND ";

if (this.TextBox10.Text != "")
sqlSelect += " Mogheyat Like '" + this.TextBox10.Text + "' AND";

if (this.TextBox5.Text != "")
{
//محاسبات
int inp = Convert.ToInt32(this.TextBox5.Text.ToString());
int avg = inp / 4;
int min = inp - avg;
int max = avg + inp;
//

sqlSelect += " (Mogheyat BETWEEN " + min.ToString() + " AND " + max.ToString() + " ) AND";
}

if (this.TextBox8.Text != "")
{
//محاسبات
long inp2 = long.Parse(this.TextBox8.Text.ToString());
long avg2 = inp2 / 4;
long min2 = inp2 - avg2;
long max2 = avg2 + inp2;
//
sqlSelect += " (PriseMetr BETWEEN " + min2.ToString() + " AND " + max2.ToString() + " ) AND";
}

if (this.TextBox9.Text != "")
{
//محاسبات
long inp3 = long.Parse(this.TextBox9.Text.ToString());
long avg3 = inp3 / 4;
long min3 = inp3 - avg3;
long max3 = avg3 + inp3;
//
sqlSelect += " (AllMeter BETWEEN " + min3.ToString() + " AND " + max3.ToString() + " ) AND";
}

if (this.TextBox6.Text != "")
{
//محاسبات
long inp4 = long.Parse(this.TextBox6.Text.ToString());
long avg4 = inp4 / 4;
long min4 = inp4 - avg4;
long max4 = avg4 + inp4;
//
sqlSelect += " (MetrajMofid BETWEEN " + min4.ToString() + " AND " + max4.ToString() + " ) AND";

}

if (this.TextBox11.Text != "")
sqlSelect += " Ghedmat Like '" + this.TextBox11.Text + " '%'' AND";

if (this.TextBox2.Text != "")
sqlSelect += " Adress Like '" + this.TextBox2.Text + " '%'' AND";

if (this.TextBox3.Text != "")
sqlSelect += " adressTow Like '" + this.TextBox3.Text + " '%'' AND";

if (this.TextBox4.Text != "")
{
//محاسبات
long inp5 = long.Parse(this.TextBox4.Text.ToString());
long avg5 = inp5 / 4;
long min5 = inp5 - avg5;
long max5 = avg5 + inp5;
//
sqlSelect += " (MetrajZamin BETWEEN " + min5.ToString() + " AND " + max5.ToString() + " ) AND";
}

if (this.TextBox7.Text != "")
sqlSelect += "TedadOtagh=" + int.Parse(this.TextBox7.Text) + " AND ";
//


if (sql != "")
{
sql = "(" + sql.Substring(0, sql.Length - 3) + ")";
}

if (sqlSelect != "")
sqlSelect = "(" + sqlSelect + " 1=1)";

if ((sql != "") && (sqlSelect != ""))
return sql0 + " WHERE " + sql + " AND " + sqlSelect;
else if (sql != "")
return sql0 + " WHERE " + sql;
else if (sqlSelect != "")
return sql0 + " WHERE " + sqlSelect;

return sql0;
}

merlin_vista
چهارشنبه 01 اسفند 1386, 11:09 صبح
ممنون آقا : خیلی خوب بود و مشکلم را حل کرد . !

فقط با LIKE مشکل دارم ، ببین از این خطا میگره :‌

sqlSelect += " Mogheyat Like '" + this.TextBox10.Text + "' AND";

e-shahshahani
چهارشنبه 01 اسفند 1386, 13:44 عصر
اگه درست نشد صفحه aspx و کد آن را ضمیمه کم تا بتونم تست کنم!



اگه نتونم تست کنم از کجا بگم؟؟؟ فایل ها را بفرست.

merlin_vista
چهارشنبه 01 اسفند 1386, 13:54 عصر
اگه نتونم تست کنم از کجا بگم؟؟؟ فایل ها را بفرست.

این هم قسمت سرچ :ناراحت:

e-shahshahani
چهارشنبه 01 اسفند 1386, 14:27 عصر
من تو چند تا حالت تست کردم. خروجی sql که تولید می کنه را بردم توی sql server و parse کردم، مشکل نداشت. احتمالا نوع فیلد ها با مقدار مورد مقایسه و یا عملگر ورد مقایسه مشکل داره.
آیا نوع فیلد Mogheyat عددی هست یا رشته ای؟؟؟ اگر رشته ای هست می تونی از like استفاده کنی. در ضمن فیلد های عددی هم به گیومه نیاز ندارند.

یه بررسی بکن ببین هر فیلدی درست مقایسه شده یا نه.

موفق باشید.