to sequelbo(那一剑的风情) :我数据库存的是一个条件表达式形如"((i>100)&&(i<500))"之类问题: 假若我想知道1~200这此数据是否满足上面这此表达式;我的做法: 取出条件表达表,替换i为实际数据,表达式成:"((1>100)&&(1<500))",但这时是字符串格式.请问: 如何判断这个表达式是真或假。不知是否说清楚(^_^)
把条件表达式用SQL的语法 再动态生成SQL语句的处理 string Where = "(101>100) AND (101<500)"; string sql = "Select boolitem = Case When "+Where+" Then 'True' else 'False' end";
SQL处理完结果后放在程序中转成Bool型
string aa="((i>100)&&(i<500))"; string a=aa; a=a.Remove(0,a.IndexOf(">")+1); a=a.Remove(a.IndexOf(")"),a.Length-a.IndexOf(")")); string b=aa; b=b.Remove(0,b.IndexOf("<")+1); b=b.Remove(b.IndexOf(")"),b.Length-b.IndexOf(")")); int inta=Convert.ToInt32(a); int intb=Convert.ToInt32(b); int i=300; this.check(i,a,b); public bool check(int i,int a,int b) { if(i>a&&i<b) { return true; } else { return false; } }
caozping(蓝贝) 真高!! 佩服!
to caozping(蓝贝) : 但这样要连接数据库(即使不操作任何数据),影响速度! 下面是我的部分程序: //条件判断 private bool CheckValue(string strIF,string strIFCurr) { int intMin=0; int intMax=1000; //求需要检验的最大值和最小值(可扩充) string strField=""; string strSql=""; strField=GetIFField(strIF); Lib.DB objDB=new Lib.DB(); DataSet objDs=null; //for (int i=-2147483648;i<2147483647;i++) for (int i=intMin;i<intMax;i++) { strSql="select count(*) as cnt where " + strIF.Replace(strField,i.ToString()); objDs=objDB.getDataSet(strSql); // string strTmp=""; // strTmp=strIF.Replace(strField,"'"+i.ToString()+"'"); if (objDs.Tables[0].Rows[0]["cnt"].ToString()=="1") return false; } objDs.Dispose(); objDB=null; return true; }只用了1000个数值,要3秒,如果是所有整数... 请问不连接数据库,可以实现吗?请指点!
"((101>100) && (101<500))"转换成bool
干吗要字符串呢?
public bool check(int i)
{
if(i>100&&i<500)
{
return true;
}
else
{
return false;
}
}
是这个意思吗?
假若我想知道1~200这此数据是否满足上面这此表达式;我的做法:
取出条件表达表,替换i为实际数据,表达式成:"((1>100)&&(1<500))",但这时是字符串格式.请问:
如何判断这个表达式是真或假。不知是否说清楚(^_^)
string Where = "(101>100) AND (101<500)";
string sql = "Select boolitem = Case When "+Where+" Then 'True' else 'False' end";
string a=aa;
a=a.Remove(0,a.IndexOf(">")+1);
a=a.Remove(a.IndexOf(")"),a.Length-a.IndexOf(")"));
string b=aa;
b=b.Remove(0,b.IndexOf("<")+1);
b=b.Remove(b.IndexOf(")"),b.Length-b.IndexOf(")"));
int inta=Convert.ToInt32(a);
int intb=Convert.ToInt32(b);
int i=300;
this.check(i,a,b);
public bool check(int i,int a,int b)
{
if(i>a&&i<b)
{
return true;
}
else
{
return false;
}
}
佩服!
但这样要连接数据库(即使不操作任何数据),影响速度!
下面是我的部分程序:
//条件判断
private bool CheckValue(string strIF,string strIFCurr)
{
int intMin=0;
int intMax=1000; //求需要检验的最大值和最小值(可扩充)
string strField="";
string strSql="";
strField=GetIFField(strIF);
Lib.DB objDB=new Lib.DB();
DataSet objDs=null;
//for (int i=-2147483648;i<2147483647;i++)
for (int i=intMin;i<intMax;i++)
{
strSql="select count(*) as cnt where " + strIF.Replace(strField,i.ToString());
objDs=objDB.getDataSet(strSql);
// string strTmp="";
// strTmp=strIF.Replace(strField,"'"+i.ToString()+"'");
if (objDs.Tables[0].Rows[0]["cnt"].ToString()=="1") return false;
}
objDs.Dispose();
objDB=null;
return true;
}只用了1000个数值,要3秒,如果是所有整数...
请问不连接数据库,可以实现吗?请指点!