当前位置: 代码迷 >> Sql Server >> Linq to entity 使用存储过程无法识别返回结果集解决方案
  详细解决方案

Linq to entity 使用存储过程无法识别返回结果集解决方案

热度:71   发布时间:2016-04-24 08:58:56.0
Linq to entity 使用存储过程无法识别返回结果集
各位大神,小弟有一个登录的存储过程,返回一个结果集,但是用EF5.0加进去无法识别,返回的总是int类型,但结果存储过程执行的结果肯定是list类型,请问到底是哪个sql语句影响了,应该怎么改呢,代码如下
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
--@l_LoginStatus  0 ---- 用户名不存在
--                1 ---- 成功登录
--                2 ---- 禁用 连续登录失败3次
--                3 ---- 密码错误
--                
-- =============================================
ALTER PROCEDURE [dbo].[SystemLogin]
-- Add the parameters for the stored procedure here
@LoginName varchar(20)
,@PassWord varchar(35)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @l_LoginStatus int
declare @l_Count int
declare @l_StaffStatus int
declare @l_StaffID varchar(8)
declare @l_PassWord varchar(35)
declare @ErrorValue int

begin transaction T

select @l_StaffID=StaffID,@l_PassWord=PassWord,@l_StaffStatus=Status 
from SysStaff where LoginName=@LoginName and Status<>0 and Status<>3
set @l_Count=@@ROWCOUNT
if @l_Count=1 --用户名存在
begin
if @l_PassWord<>@PassWord--密码错误
begin
set @l_LoginStatus=3
end
else
begin
set @l_LoginStatus=@l_StaffStatus
end
end
else
begin
set @l_LoginStatus=0 --用户名不存在
end

declare @TopLoginTimes table
(
sort int,
LoginStatus int
)

if @l_LoginStatus<>0--用户名存在
begin
insert into SysLoginLog values(@l_StaffID,GETDATE(),@l_LoginStatus,
dbo.Get_Desc_DD(@l_LoginStatus,'LoginStatus'),1,@l_StaffID,GETDATE(),@l_StaffID,GETDATE()) --写入登录日志
set @ErrorValue=@ErrorValue+@@ERROR
select top 3 IDENTITY(int,1,1) as sort,LoginStatus into #TopLoginTime
from SysLoginLog where StaffID=@l_StaffID and DATEDIFF(DD,LoginDate,GETDATE())=0 order by LoginID desc --今日最近三次登录

insert into @TopLoginTimes select * from #TopLoginTime
set @l_Count=@@ROWCOUNT

drop table #TopLoginTime

if @l_Count=3 --今日最近有三次以上登录记录
begin
if (select top 1 LoginStatus from @TopLoginTimes where sort=1)<>1 and
(select top 1 LoginStatus from @TopLoginTimes where sort=2)<>1 and
(select top 1 LoginStatus from @TopLoginTimes where sort=3)<>1  --如果今日连续三次以上登录失败则禁用该登录帐号
begin
update SysStaff set Status=2 where StaffID=@l_StaffID
set @ErrorValue=@ErrorValue+@@ERROR
set @l_LoginStatus=2
end
end
end

declare @LoginStatus table
(
LoginStatus int
)
insert into @LoginStatus values(@l_LoginStatus)

select ls.LoginStatus 
,sf.StaffID
,sf.LoginName
,sf.StaffName
,sf.StaffPicUrl
,sf.RuleID
,sr.RuleName
,sf.GroupID
,sg.GroupName
from @LoginStatus ls,SysStaff sf 
left join SysGroup sg on sf.GroupID=sg.GroupID
left join SysRule sr on sf.RuleID=sr.RuleID
where sf.StaffID=@l_StaffID

if @ErrorValue<>0
begin
rollback transaction T
end
else
begin
commit transaction T
end
END
------解决思路----------------------
登录功能一般都是在程序中实现会更加方便,用存储过程太麻烦了
  相关解决方案