我无法弄清楚为我的存储过程获得-1的原因是什么。
这里代码背后的代码(C#):
ContentProvider
这是我的存储过程代码:
SqlCommand _command = _connection.CreateCommand();
_command.CommandText = "usp_ZX_GetValidToken";
_command.CommandType = CommandType.StoredProcedure;
_command.Parameters.AddWithValue("@tokenstring", tokenString);
_command.Parameters.AddWithValue("@difference", lifeInSeconds);
Object _response = _command.ExecuteNonQuery();
哦,是的!我还确保我的表有正确的数据,并且我总是在调用过程之前执行下面的代码:
CREATE procedure [dbo].[usp_ZX_GetValidToken]
@tokenstring nvarchar(50), @difference int
AS
IF EXISTS(SELECT * FROM AppAccessTokens
WHERE Consumed = 0 AND GUIDToken = RTRIM(@tokenstring)
AND DATEDIFF(SECOND, CreateDateTime, GETDATE()) <= @difference)
RETURN 1;
ELSE
RETURN -1;
上述C#代码中的update AppAccessTokens
set CreateDateTime = GETDATE()
总是_response
,我真的无法自己解决这个问题。我需要重新审视这个。
我尝试重启机器,服务器和IIS。 (我知道它没有意义)但没有任何改变,它始终保持返回-1。
有人可以建议我该怎么办?
答案 0 :(得分:2)
这是因为当您的SP执行时,它不会影响任何行,因此ExecuteNonQuery
将始终返回0
。像这样更改您的SP: -
IF EXISTS(SELECT * FROM AppAccessTokens WHERE Consumed = 0
AND GUIDToken = RTRIM(@tokenstring) AND
DATEDIFF(SECOND, CreateDateTime, GETDATE()) <= @difference)
SELECT 1;
ELSE
SELECT -1;
然后使用ExecuteScalar
执行它,它将读取第一列的第一行,我们只在SP中选择1个值,因此_response
将获得正确的值: -
int _response = Convert.ToInt32(_command.ExecuteScalar());
或者,您也可以使用输出参数。