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

这两种SQL语句有什么优缺点?你会选择哪种?
这两种SQL语句有什么优缺点?你会选择哪种?
SQL code

第一种
 strMaxReqNo = lblSeq.Text
            strSQL = "INSERT INTO LEAVREQ" & strFileName & " Values("
            strSQL &= "'" & strMaxReqNo & "',"
            strSQL &= "'" & Session("EmpNo") & "',"
   clsDbProcess.ExecuteSQL(Session("Server"), Session("Database"), strSQL)
这里用session会有什么安全问题?


SQL code

第二种
  Dim coursenum As String = "sdf"
  Dim coursename  As String = "aadg"
       
        Dim paras As SqlParameter() = {New SqlParameter("@coursenum", SqlDbType.NVarChar, 50), New SqlParameter("@coursename", SqlDbType.NVarChar, 50}
        paras(0).Value = inputuser
        paras(1).Value = edituser
 Sqlh.ExcuteNonQurey("INSERT INTO [c_course] (coursenum,coursename,) Values(@coursenum,@coursename)", CommandType.Text, paras) 



目前我要强迫用第一种。。。。。。郁闷。。。为的是代码统一。风格统一。。。



------解决方案--------------------
选择第二种,使用参数比较好。
最大的优点:安全、适用性

1、安全:
要是你的inputuser 中有字符串“alonesword' OR 1=1” (sql injection)结果会怎样呢?(不用知道你的密码,我也可以登录你的系统)
2、适用性:
这个主要指多数据库系统,比如:oracle + Access 、Oracle+ sql,sql + access,通常用在 winApp 中,管理段用 oracle (sql server) ,客户端用 sql server (access),如果你是第一种,必须针对每中数据库写不同的sql,第二种则可以避免这种问题;
同时,第二种对于字段的类型已经自动处理,不需要管字段的类型,特别是你遇到日期类型时,你就知道了。

拼凑sql始终赶不上参数化的sql

------解决方案--------------------
第二种,安全性强,健壮性强。

第一种的,输入英文'符号马上就错误了。
------解决方案--------------------
选择第二种,使用参数比较好。 
最大的优点:安全、适用性 ,通用性!
------解决方案--------------------
还是选择第二中
和存储过程接近!
速度快
安全性高!
------解决方案--------------------
使用参数一个是为了程序和构建sql语句简洁,另一个防止值中包含单引号等字符引起语法错误而还要特别加个函数去处理