不,你不会完全安全的.正如其他人提到的那样,参数化查询始终是可行的--无论您以何种方式访问数据库.
有了PROCS,你就安全了,这有点像都市传说.我认为人们产生这种错觉的原因是因为大多数人认为您将使用代码中的参数化查询来调用pros.但是如果你不这样做,比如你做了下面这样的事情,你就大开眼界了:
SqlCommand cmd = new SqlCommand("exec @myProc " + paramValue, con);
cmd.ExecuteNonQuery();
因为您使用的是来自最终用户的未过滤内容.再一次,他们所要做的就是终止行(";"),添加他们的危险命令,然后砰--您就完蛋了.
(顺便说一句,如果您是在Web上,不要从浏览器的查询字符串中提取未过滤的垃圾--这会让您的数据很容易做出极其糟糕的事情.)
如果您将查询参数化,您的状态会好得多.但是,正如这里的其他人所提到的,如果您的进程仍在生成并执行动态SQL,则可能仍然会出现问题.
我应该注意到我不是反程序的.PROC对于解决某些数据访问问题非常有帮助.但PROC是SQL注入的"银弹解决方案".