动态添加参数?那如何在不拼接sql的情况下动态添加参数? 你不一样要这么写: List <SqlParameter> arr = new List <SqlParameter>(); if(条件1){ sql += "and 字段1=@v字段1"; arr.Add(new SqlParaMeter(...... }
无论是拼接语句还是参数化,都需要这样类似的语句吧? 如果不用"1=1 and ..",像#13楼那样参数化,or语句比and语句的效率更低。sql server会自动把or语句转化为union语句,不过也不会比where 1=1 and..效率高 你说的sqljoin()函数能发个例子吗?我以前用过每个条件后面都加个"and",到最后trim掉最后一个"and",但这样跟"1=1"拼接在效率上几乎没有差别。
事实上,是可以不拼接的,在Oracle里可以这么写: and (id = :vId or :vId is null)这样写就不用拼接Sql了,每一次执行的sql都是一致的,这样第一次执行完后,后续的执行可以复用第一次的执行计划, 但是这样的后果导致全表扫描,而不会走索引扫描 效率低下。所以要根据实际情况来判断,是拼接sql还是不拼接。以上是我的经验。SqlServer不清楚。
这就是or语句啊。。那and之间怎么连起来呢?
select * from tb1 where 1=1 and (id = :vId or :vId is null) and (name = :vName or :vName is null)注意:or后面跟的是参数,不是字段
前台用户选择字段嘛,
后台就: string sql = "select " + 用户拼接的字段(以逗号分隔) + " from tb1 where 1=1";if(条件1){
sql += "and 条件1";
}
拼接SQL!
比如:左右2个窗口!左边 :开始时间,结束时间,ID用户点击 开始时间;右边出现:开始时间 (下拉,=,<=,>=,!=,<,>) 时间控件
这样土星化界面咯!
然根据 用户选择操作表,开始时候(字段) 去拼接 SQL
// condition数组存了你要查询的条件
public List<T> GetTByCondition(string[] condition)
{
string sql = "select * from TableName where 1=1 ";
// if条件是用来约束查询条件的,根据实际情况判断
if ("0" != condition[0])
{
sql += " and 字段1 = " + condition[0];
}
if ("0" != condition[1])
{
sql += " and 字段2 = " + condition[1];
}
if ("" != condition[2])
{
sql += " and 字段3 >= " + condition[2];
}
if ("" != condition[3])
{
sql += " and 字段4 <= " + condition[3];
}
// 自己的通用方法,通过sql查找信息用的
return GetList(sql);
}
的1楼的答复,
拼接sql时,对于数值型的,在拼接sql前判断是否数值,不是就报错;
对于字符串型的,拼接sql前,把字符串里的单引号替换成2个单引号。
每个控件获得的字符串值都用Replace("'","")方法将单引号过滤掉,就可以解决该问题。
if(...!=string.empty)
{
cmdSt+="...............";
}
现在还有多少公司在用8i以前的版本呢?
你不一样要这么写:
List <SqlParameter> arr = new List <SqlParameter>();
if(条件1){
sql += "and 字段1=@v字段1";
arr.Add(new SqlParaMeter(......
}
无论是拼接语句还是参数化,都需要这样类似的语句吧?
如果不用"1=1 and ..",像#13楼那样参数化,or语句比and语句的效率更低。sql server会自动把or语句转化为union语句,不过也不会比where 1=1 and..效率高
你说的sqljoin()函数能发个例子吗?我以前用过每个条件后面都加个"and",到最后trim掉最后一个"and",但这样跟"1=1"拼接在效率上几乎没有差别。
and (id = :vId or :vId is null)这样写就不用拼接Sql了,每一次执行的sql都是一致的,这样第一次执行完后,后续的执行可以复用第一次的执行计划,
但是这样的后果导致全表扫描,而不会走索引扫描
效率低下。所以要根据实际情况来判断,是拼接sql还是不拼接。以上是我的经验。SqlServer不清楚。
and (id = :vId or :vId is null)
and (name = :vName or :vName is null)注意:or后面跟的是参数,不是字段
sql += "and 条件1";
}----
比如传的字符串。。method(string strName)
sql+= "and [name] like %'"+ strName +"'% ";这是相当糟糕的。
string a = Request.QueryString["id"];
string sql = "select * from tb where id = '"+ a.Replace("'","''") +"'";
我当然不赞成13楼那样
我和你的做法差不多,只是我把“And”加在每个条件的前面。当实际使用时,我根据前半部分的SQL语句来判断,如果前半部分已经用了Where了,那我就直接挂上去,如果前半部分没有用过Where,那么我就用SQLJoin,SQLJoin的作用是把条件语句的第一个And替换为Where。这样做当然跟1=1是有区别的,在某些数据库中,使用1=1会导致遍历每一条记录,会严重降低效率。
很有意思
如果开发的是一个公开发行版本
有成千上万的人在用
难道你每个人都去问:“请问您用什么数据库?”?
或者在说明文档里写上一句:本软件必须使用Oracle 9,使用版本8效能会降低。?本来如果能设计成与外部无关的,符合黑盒原理是最好的,你偏偏不,非要限制用户的动作,我不能说你有错,只能说你的程序质量不够高罢了。
就算是通用程序,你见过几个程序没有对数据库有限制的?
包括游戏啥的,
在说明里都有这样的语句:
运行软件环境:
WindowsXP或更高版本、SqlServer2000或更高版本
硬件环境:
可运行环境:CPU:P3以上版本,
建议环境:CPU:P4以上版本
如果你坚持你的意见,请列举出一些比较通用的大型的应用程序,没有数据库要求的而且照你所说,开发出来的程序应该连Oracle 1.0都要支持
不然就是程序质量差那如果这样,我无话可说。
可运行环境:CPU:P3以上版本,
建议环境:CPU:P4以上版本
人家有个可以运行的最低要求,和推荐要求你所谓的符合黑盒原理,只能尽量,没有哪个程序能做到完全
如果你的程序都能做到,那你也不会在这里,应该是微软或sun之类的cto了
内存:8G以上
操作系统:Windows 7以上你去卖吧,看看有几个人买你的软件什么东西不能凭想象,懂吗?一句“现在没几个人用ORACLE 8.0I了吧”充分表明了你的无知。你不如说:“VISTA和WIN7都出来一年了,所以现在没几个人用XP了吧?所以我只支持WIN7有什么错呢?”真是无知者无畏。
你知道Oracle8什么时候上市的吗?Oracle9又是什么时候上市的吗?
不知道就去了解清楚了再来说话如果你用Oracle8与Win98比较,还有点意思,因为它俩是一个时代的作品
如果你现在写程序还在考虑能否在Win98上运行,那你真是太牛B了如果你还因为别人只兼容Win2000以上的版本,而bs别人,那你真是太装B了不说了,收拾一下,回家过年。
if(txt1.text!="")
{
sql+="and cloumn='1'"
}
if(txt2.text!="")
{
sql+="and cloumn='2'"
}
if(sql.length> 3)
{
sql= sql.Substring(3, sql.Length - 3);
}
return sql
if(txt1.text!="")
{
sql+="and cloumn='1'"
}
if(txt2.text!="")
{
sql+="and cloumn='2'"
}
if(sql.length> 3)
{
sql= sql.Substring(3, sql.Length - 3);
}
return sql