2016-03-11 75 views
0

我想從存儲過程中獲取字符串返回值,但我得到空值。存儲過程運行正常,並返回預期的字符串(我使用SQL Server Profiler檢查結果),但在代碼中得到空字符串。從存儲過程獲取空值返回

public static string GetStringValue(string pCode) 
{ 
    String strConnString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
    SqlCommand cmd = new SqlCommand(); 

    string returnValue = ""; 

    cmd.CommandText = "usp_GetStringValue"; 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Connection = new SqlConnection(strConnString); 

    cmd.Parameters.AddWithValue("@pcode", pCode); 
    //cmd.Parameters.AddWithValue("@Result", ""); 
    SqlParameter sqlParam = new SqlParameter("@Result", ""); 
    cmd.Parameters.Add(sqlParam); 
    sqlParam.Direction = ParameterDirection.Output; 
    cmd.Connection.Open(); 

    cmd.ExecuteScalar(); 

    //cmd.ExecuteNonQuery(); 
    returnValue = Convert.ToString(cmd.Parameters["@Result"].Value); 

    cmd.Connection.Close(); 

    return returnValue; 
} 

這裏是我的存儲過程

ALTER PROCEDURE [dbo].[usp_GetStringValue] 

@pcode Varchar (4), 
@Result varchar(5000) OUTPUT 

AS 
BEGIN 

SET @Result=(Select pPath from mytable where pcode = @pcode) 
print @Result 

END 
+2

來自MSDN:*對於UPDATE,INSERT和DELETE語句,返回值是受命令影響的行數。當插入或更新的表上存在觸發器時,返回值包括受插入或更新操作以及觸發器或觸發器影響的行數影響的行數。對於所有其他類型的語句,返回值爲-1。如果發生回滾,返回值也是-1 *看看這可能會幫助你:http://stackoverflow.com/a/32736842/2946329 –

+0

什麼是你返回的變量類型,如果它是輸出比使用ParameterDirection 。輸出 – rashfmnb

+0

'cmd.Parameters [「@ Result」]。Value的值是什麼? – Alex

回答

0

嘗試增加其他參數,因爲它是一個輸出參數之前添加@Result。重新排列下面列出的代碼。這在過去對我很有用。我可能會爲此而惹火,但現在是星期五。

 SqlParameter sqlParam = new SqlParameter("@Result", ""); 
     cmd.Parameters.Add(sqlParam); 
     sqlParam.Direction = ParameterDirection.ReturnValue; 
cmd.Parameters.AddWithValue("@pcode", pCode); 
+1

輸出參數不同於返回參數。輸出參數使用'ParameterDirection.Output',返回參數使用'ParameterDirection.ReturnValue',問題是OP沒有澄清他是否試圖使用返回參數或輸出參數。 –

+0

我正在使用輸出參數 –

+0

我有另一個問題,'pCode'來自一個ComboBox,第一次它給了我正確的輸出字符串,但當我改變它的ComboBox值,並按下按鈕來獲得新的輸出,但它顯示第一個輸出。 –