Entity Framework存储过程处理未分配的值

时间:2013-01-06 18:23:17

标签: sql-server entity-framework stored-procedures

我有一个存储过程,如果身份验证通过这样的

,它将返回用户令牌
BEGIN
SET FMTONLY OFF --Tricky Part
DECLARE @token uniqueidentifier
DECLARE @user_id as int
SET @user_id = (SELECT UserID  FROM Users
WHERE @email = Email AND @password = PasswordKey)
IF @user_id IS NOT NULL
BEGIN
    SET @token = NEWID()
    UPDATE Users SET Token = @token
    WHERE UserID = @user_id
    SELECT * FROM Users WHERE UserID = @user_id
END
END

如果没有SET FMTONLY OFF,只有当用户输入正确的基数时才返回令牌BUT,否则错误

  

“Token”类型的成员在数据读取器中没有相应的列名称。

发生。

现在我有另一个存储过程(几乎和这个一样)返回由ID确定的单个Product,我将它传递给存储过程,即使我发送不存在的过程也能正常工作。在函数导入中,一个存储过程显示返回的列而另一个不返回。为清楚起见,这里有两个图像,显示存储过程和函数import Images

1 个答案:

答案 0 :(得分:0)

而不是使用:

SELECT * FROM Users WHERE UserID = @user_id

列出您希望从Users表返回的列的名称,而不是仅使用SELECT *。

SELECT ColumnName,
       AnotherColumn,
       YouGetThePoint
FROM  ...

听起来DataReader正在填充与预期列名不同的列名。您是否已经使用调试器和/或列出了从过程返回的实际列名称,如果它们只是被赋予任意名称(例如T1,T2)。