2012-01-08 202 views
0

所以我想從我的存儲過程擦除從數據庫中GUID @value和檢索的返回值ASP.NET SQL Server存儲過程

這是我的存儲過程

ALTER PROCEDURE dbo.verifGuids 
@value char(36), 
@message char(1)Output 
AS 
Begin 

DECLARE @SelectValue char(36) 

select @SelectValue = value FROM guids WHERE @value=value; 

If @[email protected] 
BEGIN 
DELETE value FROM guids WHERE @value=value ; 
SET @message = 0 
END 
Else 
BEGIN 
Set @message = 1 
END 

Return @message 
END 

這是我在asp.net vb.code

Dim guids As String = (Request.QueryString("ID")) 
     'stored procedure get Guid 
     Dim intRowsAff As Integer 
     Dim connectionString As String = WebConfigurationManager.ConnectionStrings("BecsEtMuseauxSQL").ConnectionString 
     Dim con As SqlConnection = New SqlConnection(connectionString) 
     Dim cmd As New SqlCommand("verifGuids", con) 
     cmd.CommandType = CommandType.StoredProcedure 
     cmd.Parameters.Add("@value", SqlDbType.Char, 36).Value = guids 
     Dim returnvalue As New SqlParameter("@message", SqlDbType.Char, 1) 
     returnvalue.Direction = ParameterDirection.Output 
     cmd.Parameters.Add(returnvalue) 

     Try 
      cmd.Connection.Open() 
      intRowsAff = cmd.ExecuteNonQuery() 
      Dim retour As String = (cmd.Parameters("@message").Value.ToString()) 
      If retour = 0 Then 

       InformationLabel.Text = "Votre compte à été vérifier vous pouver vous connecter sur le site" 
      Else 

       InformationLabel.Text = "Votre compte n'est pas aprouvé veuiller vérifier dans vos mail le message de confirmation de votre compte " 
      End If 
     Catch ex As Exception 
      InformationLabel.Text = ex.Message & ex.Source & intRowsAff '& " record(s) inserted" 
     End Try 


     cmd.Connection.Close() 

    End If 

我趕上了錯誤

對象名稱 '價值' 不valid..Net SqlClient數據Provider0

我不明白我做錯了......

這是Vb.net ...

謝謝

+0

在**哪一行**你會得到那個錯誤?也許你的查詢字符串參數不存在/爲空?代碼看起來很好,據我所知..... – 2012-01-08 17:05:08

+0

intRowsAff = cmd.ExecuteNonQuery() – FrankSharp 2012-01-08 17:06:23

回答

2

我覺得你在你的存儲過程的代碼有一個錯誤:

select @SelectValue = value FROM guids WHERE @value=value; 

這是錯誤的 - 它應該是

SELECT @SelectValue = value FROM guids WHERE value = @value 

同樣在這裏:

DELETE value FROM guids WHERE @value=value ; 

必須將value)與傳入的參數(@value)進行比較,而不是反過來!因此,將其更改爲:

DELETE FROM guids WHERE value = @value 

,你應該罰款

你的存儲過程是太多太複雜....你可以把它簡化爲:

ALTER PROCEDURE dbo.verifGuids 
    @value char(36), 
    @message char(1) OUTPUT 
AS 
BEGIN 
    -- this will *already* delete only if the "value" column matches your "@value" 
    -- parameter - there's really no need to first do a SELECT on that table to 
    -- verify that! 
    DELETE FROM dbo.guids WHERE value = @value; 

    IF @@ROWCOUNT > 0 
     SET @message = 0 -- if you deleted anything - the set @message to "0" 
    ELSE 
     SET @message = 1 

    RETURN @message 
END 
+0

對象值仍然是相同的錯誤 – FrankSharp 2012-01-08 17:21:49

+0

我將更改名稱它可能會干擾Sql服務器... – FrankSharp 2012-01-08 17:22:35

+0

我將其更改爲名爲valueGuid的列,它仍然對象名稱'valueGuid'無效..Net SqlClient數據Provider0執行cmd.ExecuteNonQuery()... – FrankSharp 2012-01-08 17:28:28

0

你必須使用Out參數作爲返回值。你可以參考這個網站 Parameter Directions,並且你也檢查MSDN Documentaion

+0

OP **確實在他的存儲過程中有一個'OUTPUT'參數,並且他也正確設置了它(據我所知)在他的VB.NET代碼.... – 2012-01-08 17:06:40

+0

哎呀。我錯過了 – 2012-01-08 17:11:56

0

你需要改變您在存儲過程中的刪除語句爲:

DELETE FROM test WHERE [email protected] 
+0

啊 - 你打我的解決方案!我只是建議.... :-) – 2012-01-08 20:56:39

0

將您的ParameterDirection.Output更改爲ParameterDirection.ReturnValue

+0

這並不會改變任何事情,當然也不會解決OP的問題.....而他**確實有** OUTPUT '他可以讀出的參數。這完全沒有幫助,對不起。 – 2012-01-08 20:58:25