我有一个存储过程,如果身份验证通过这样的
,它将返回用户令牌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
答案 0 :(得分:0)
而不是使用:
SELECT * FROM Users WHERE UserID = @user_id
列出您希望从Users表返回的列的名称,而不是仅使用SELECT *。
SELECT ColumnName,
AnotherColumn,
YouGetThePoint
FROM ...
听起来DataReader正在填充与预期列名不同的列名。您是否已经使用调试器和/或列出了从过程返回的实际列名称,如果它们只是被赋予任意名称(例如T1,T2)。