我正在为ASP.NET中设计的新闻页面使用标记系统。对于该系统,我需要一个TagExists方法来检查数据库中的标签。下面是我写的存储过程。SQL存储过程无法返回值
ALTER PROCEDURE [dbo].[Tags_TagExists](
@Tag varchar(50))
AS
BEGIN
If (EXISTS(SELECT * FROM dbo.Tags WHERE LOWER(@Tag) = LOWER(Tag)))
RETURN 1
ELSE
RETURN 0
END
当我调用这个方法时,总是返回0。我使用下面的代码来调用该方法
Public Shared Function TagExists(ByVal name As String) As Boolean
Dim result As Boolean
Using conn As SqlConnection = New SqlConnection(ConnectionString)
Dim cmd As New SqlCommand("Tags_TagExists", conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@Tag", name)
conn.Open()
result = Convert.ToBoolean(cmd.ExecuteScalar())
conn.Close()
End Using
Return result
End Function
我已经尝试切换的过程,如果标签存在,1,如果它不,它仍然不顾完全相同的测试条件返回0,返回0。我也返回了实际的select查询,并且它抱怨Tag“news”(我的测试项目)不是执行时的int,它显示select本身肯定是正确组建的。
如果任何人都可以提供一些线索这光,感谢 迈克尔
完美的工作 – 2010-09-07 19:54:17
请解释aspnet_Roles_RoleExists如何使用return而不是select,我看不出为什么它在那里工作而不在这里 – 2010-09-07 19:55:32
@Mikey:检索存储过程的返回值的代码与检索结果集的代码不同。查看Justin Niessner的代码来获取返回值的答案。 – 2010-09-07 19:56:53