日期:2014-05-19  浏览次数:20409 次

很简单的一个存储过程,就是搞不定???
create   proc   Login
(
@Name   nvarchar(50),
@Pwd   nvarchar(50)
)
as  
declare   @equal   nvarchar(4)
set   @equal= '= '
declare   @str   nvarchar(1000)
set   @str= 'select   *   from   Users   where   LgName   '   +   @equal   +   @Name   +   'and   Pwd   '   +   @equal   +   @Name
exec   sp_executesql   @str
go  

这个验证用户登录的存储过程调试成功,就是当调用的时候老是起不到作用,不知道错在什么地方了,请大侠指教??


------解决方案--------------------
create proc Login
(
@Name nvarchar(50),
@Pwd nvarchar(50)
)
as
declare @equal nvarchar(4)
set @equal= '= '
declare @str nvarchar(1000)
set @str= 'select * from Users where LgName ' + @equal + ' ' ' ' + @Name + ' ' ' and Pwd ' + @equal + ' ' ' ' + @Pwd + ' ' ' '
exec sp_executesql @str
go

------解决方案--------------------
它的 意思就是说

一般对于字符型的字段了在sql语句中对应的值应该用单引号括起来
比如
select × from a where name= 'qiyuefeng '

对应你的问题就是组合的时候加个单引号的问题
------解决方案--------------------
create proc Login
(
@Name nvarchar(50),
@Pwd nvarchar(50)
)
as
select * from Users where LgName = @Name and Pwd = @Pwd
go
最好不要用上面的方法:因为如果输入的密码是: ' 'or 1 <> 0 --
那样的话你的数据就暴露出去了
------解决方案--------------------
這個東西,在前端就要控制,不能讓 ' 'or 1 <> 0 --這樣的數據傳入存儲過程中。