当前位置: 代码迷 >> Sql Server >> 存储过程的where解决方法
  详细解决方案

存储过程的where解决方法

热度:103   发布时间:2016-04-27 14:10:37.0
存储过程的where
存储过程的条件是直接写在存储过程里面,还是在页面写where 然后将where传到存储过程
例如:if (BusinessType != "请选择")
  {
  where += " and BusinessType='" + this.BusinessTypeDrop.Text.ToString() + "'";
  }
这样写好吗?

------解决方案--------------------
写在存储过程里面,直接传参数进去就可以了。


------解决方案--------------------
探讨

如果where写在外面有什么不好的地方吗?

------解决方案--------------------
探讨
如果where写在外面有什么不好的地方吗?

------解决方案--------------------
都可以
------解决方案--------------------
推荐写到存储过程里面,将参数传入存储过程,获取结果集。
------解决方案--------------------
最好是放在里面,用参数传进来
------解决方案--------------------
探讨
如果where写在外面有什么不好的地方吗?

------解决方案--------------------
探讨
存储过程的条件是直接写在存储过程里面,还是在页面写where 然后将where传到存储过程
例如:if (BusinessType != "请选择")
{
where += " and BusinessType='" + this.BusinessTypeDrop.Text.ToString() + "'";
}
这样写好吗?

------解决方案--------------------
写在外面就要考虑到SQL注入的危险

还有我理解写在外面是在拼凑SQL语句,然后将语句传递给数据库。
而调存储过程只需要传递参数。

前者传输量比后者大
------解决方案--------------------
SQL code
--写在存储过程中,防止SQL注入 CREATE PROCEDURE proc_test    @para1 INT = NULL,    @para2 VARCHAR(100) = NULLASBEGIN    SELECT TOP 10 * FROM table_name    WHERE 1 = 1        AND (@para1 IS NULL OR field1 = @para1)        AND (@para2 IS NULL OR field2 = @para2)END--如果写在代码中,用拼SQL的方式,正好给SQL注入提供了入口if (BusinessType != "请选择"){    this.BusinessTypeDrop.Text = "test' or '1' = '1"; --可注入    where += " and BusinessType='" + this.BusinessTypeDrop.Text.ToString() + "'";}
------解决方案--------------------
写在里面也可能被注入啊。
------解决方案--------------------
探讨
SQL code
--写在存储过程中,防止SQL注入
CREATE PROCEDURE proc_test
@para1 INT = NULL,
@para2 VARCHAR(100) = NULL
AS
BEGIN
SELECT TOP 10 * FROM table_name
WHERE 1 = 1
AND (@para1 I……

------解决方案--------------------
最好写在存储过程中,参数化,防注入!
  相关解决方案