我正在爲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