日期:2014-05-18  浏览次数:20467 次

请教有开发经验的一个问题:? 随心谈````回答都有分
各位大虾:
  你们好,我刚开始项目开发,想请教下.在项目中 有如下情况:
  String strTest = this.ddlOdevice.SelectedValue.ToString();
  .....SQL语句 (.....where *=strTest )
当然直接用
  .....SQL语句 (.....where *=this.ddlOdevice.SelectedValue.ToString())
  也可以 
就想问下 这样类似的 用变量好 还是直接写好呢 ?
  谢谢!!!

------解决方案--------------------
.....SQL语句 (.....where *=this.ddlOdevice.SelectedValue.ToString()) 

这种写法存在一个最大的问题就是有sql注入漏洞.

比较好的做法是把数据层封装起来
------解决方案--------------------
变量好
------解决方案--------------------
用变量
------解决方案--------------------
用变量好。直接写sql比较死板
------解决方案--------------------
本质上,你那两个写法没有区别,都一样是拼语句

他们所说的用变量,是指的SQL变量,SQL语句 (.....where *= @strTest ) 

这里有@strTest,是一个sqlParameter.

------解决方案--------------------
过程和参数
------解决方案--------------------
发表于:2007-10-09 09:40:005楼 得分:0 
本质上,你那两个写法没有区别,都一样是拼语句 

他们所说的用变量,是指的SQL变量,SQL语句 (.....where *= @strTest )

这里有@strTest,是一个sqlParameter.

----------------
正解。
------解决方案--------------------
我已经说得很明白了``

string sqlstr = (.....where *= @strTest ) 

SQLCommand cmd = new SQLCommand( sql,conn)
SQLParameter pare = new SQLParameter("@strTest",DBType.Antistring,this.ddlObdvice.SelectValue.ToString());
cmd.parameters.add(para);
------解决方案--------------------
jiefen
------解决方案--------------------
用存储过程
------解决方案--------------------
各位大虾:
你们好,我刚开始项目开发,想请教下.在项目中 有如下情况:
String strTest = this.ddlOdevice.SelectedValue.ToString();
.....SQL语句 (.....where *=strTest )
当然直接用
.....SQL语句 (.....where *=this.ddlOdevice.SelectedValue.ToString())
也可以 
就想问下 这样类似的 用变量好 还是直接写好呢 ?
谢谢!!!
--------------------------------------------
第一个好。用变量易维护。(其实单从效率上说第二个还高些,但是可以忽略)
其实严格的说2个都不规范,要用SQLparameter
------解决方案--------------------
怎么写都没有存储过程好.
------解决方案--------------------
用存储过程,他好我也好
------解决方案--------------------
查询语句也可以用存储过程的啊
我觉得用存储过程相对来说比较容易维护
如果不改变字段的前提下 修改存储过程可不用修改代码
------解决方案--------------------
使用存储过程带来的好处是很明显的,运行效率提高,防注入式攻击,对于联表操作在空间和时间上都具有优势.

但是坏处也不少:存储过程就是一个黑盒子,外面输入的东东进行之后得出一个东东,你完成不知道存储过程里做了些什么.如果单看存储过程不联系代码,又很难明白存储过程完成的是什么业务,因为你看到的都是字段的操作.如果都是自己写的,当然很轻松;如果是看别人的存储过程,恭喜,你家的阿斯匹林不会浪费了.去年接手一个项目时看着那1000行的存储过程,很有辞职的冲动.

以前我也是全部写存储过程,现在大部分改成了带SQLparameter的查询语句,只是为了方便后来人.只是写代码的时候遇到多表操作,时间复杂度高了不少,好在现在的CPU越来越强悍,对于一些可预见数据量的项目还是可以接受的.至于海量数据的项目,也只是在适当的地方用存储过程,而且要求一定不能太长,而且要在注释中写明在哪些页面关联哪些业务.
------解决方案--------------------
呵 谢谢楼上 
理解你的意思. 
  
 .....SQL语句 (.....where *=this.ddlOdevice.SelectedValue.ToString())

这种写法存在一个最大的问题就是有sql注入漏洞.
那应该怎么写呢? 
==================================================================》