0

如果像这样通过身份验证,我有一个存储过程返回用户令牌

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它,仅当用户输入正确的基数时才返回令牌,否则会出错

类型的成员“令牌”在数据读取器中没有同名的对应列。

发生。

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

4

1 回答 1

0

而不是使用:

SELECT * FROM Users WHERE UserID = @user_id

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

SELECT ColumnName,
       AnotherColumn,
       YouGetThePoint
FROM  ...

听起来 DataReader 填充的列名与预期的列名不同。如果只是给它们指定任意名称(例如 T1、T2),您是否已使用调试器单步执行和/或列出了从过程返回的实际列名。

于 2013-01-07T03:43:53.010 回答