2013-10-31 374 views
1

我已經做到了,但只是無法讓它工作,我只想在我的SP中做一個選擇,返回任何內容,然後在代碼隱藏中執行,然後使用返回的代碼執行任何操作。我如何獲得SP返回值?

的C#代碼

存儲過程使用

protected long getPassword(string EnteredPass) 
{ 
    var connectionString = ConfigurationManager.ConnectionStrings["GetConnector"].ConnectionString; 
    SqlConnection dbConnection = new SqlConnection(); 
    dbConnection.ConnectionString = connectionString; 
    SqlCommand dbCommand = new SqlCommand("PL_User_Check", dbConnection); 
    dbCommand.CommandType = CommandType.StoredProcedure; 

    SqlParameter abc = dbCommand.Parameters.Add("@User", SqlDbType.VarChar); 
    abc.Value = EnteredPass; 
    dbCommand.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue; 

    dbConnection.Open(); 

    dbCommand.ExecuteNonQuery(); 
    dbConnection.Close(); 
    object x = dbCommand.Parameters[""].Value; 
    return Convert.ToInt64(x); 
} 
...

ALTER PROCEDURE [dbo].[PL_User_Check] 
    @User VARCHAR(50), 
    @ReturnValue BIGINT OUTPUT 
AS 

DECLARE @pass BIGINT 

--Data 
SET @Pass = (SELECT Pass 
    FROM dbo.UserPasswords 
    WHERE [User] = @User) 

SET @ReturnValue = @Pass 
+0

你的SP看起來是過度設計之後。爲什麼不簡單地將其限制爲選擇查詢。然後它應該返回一個Datatable到.net,並且你可以在那裏提取這個值。 –

回答

2

:代替

ParameterDirection.Output 

ParameterDirection.ReturnValue 
+0

我嘗試過,但輸出未被識別。 – connersz

+0

好的,有點修補,我明白了,謝謝。 – connersz

+0

@connersz,我很高興我可以幫助! –

0

顯式傳遞參數,然後您可以查詢參數對象的值。您正在使用Parameters.Add並隱式創建該對象。方法:

  1. 返回值的創建參數對象
  2. 添加到的DbCommand明確

這應該解決您的問題。

0

之前執行

dbCommand.AddOutParameter("@ReturnValue", DbType.Int64); 

執行

dbCommand.GetParameterValue<Int64>("@ReturnValue") 
+0

On GetParameterValue我收到一個錯誤:不包含'getparametervalue'的定義 – connersz

+0

AddOutParameter – connersz