[英]How to return output varchar value from SQL stored procedure
我正在嘗試從 SQL 獲取 varchar 值以在 C# 中的函數中使用這里是我如何嘗試創建存儲過程以返回,我感謝任何幫助。
@結果
作為輸出值
CREATE PROCEDURE [dbo].[RolValidation]
@UserID int,
@result varchar(50) output
AS
BEGIN
Select @result=role from LogUser where UserID=@UserID
end
這是 C# 中的函數
if (sqlCon.State == ConnectionState.Closed)
sqlCon.Open();
SqlCommand sqlcmd = new SqlCommand("RolValidation", sqlCon);
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.Parameters.AddWithValue("@UrunID", SqlDbType.Int);
sqlcmd.Parameters.Add("@result", SqlDbType.NVarChar,50).Direction = ParameterDirection.Output;
string rol = Convert.ToString(sqlcmd.Parameters["@UrunID"].Value);
sqlcmd.ExecuteNonQuery();
returnValue = rol;
看起來您問題中的代碼並不是您正在處理的真實代碼,因此可能有其他原因導致您無法收回價值。
但是,從我看到的情況來看,如果您稍微修改一下 SP:
CREATE PROCEDURE [dbo].[RolValidation]
@UserID INT;
AS
BEGIN
SET NOCOUNT ON;
DECLARE @result varchar(50);
SET @result = Select role from LogUser where UserID=@UserID;
RETURN @result;
END
在你的 C# 代碼中:
if (sqlCon.State == ConnectionState.Closed)
{
sqlCon.Open();
}
SqlCommand sqlcmd = new SqlCommand("RolValidation", sqlCon);
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.Parameters.AddWithValue("@UserID", SqlDbType.Int);
sqlcmd.Parameters["@UserID"].Value = userID;
var rol = cmd.Parameters.Add("@result", SqlDbType.NVarChar, 50);
rol.Direction = ParameterDirection.ReturnValue
sqlcmd.ExecuteNonQuery();
returnValue = rol.Value;
基本上,您的原始代碼 1 存在兩個主要問題 - 您應該SET
該值,然后“返回”它。 您可以將其設置為內聯SELECT
查詢,但我更喜歡這種顯式方法 2 - 您試圖在執行查詢之前獲取值:
string rol = Convert.ToString(sqlcmd.Parameters["@UrunID"].Value);
sqlcmd.ExecuteNonQuery();
這是錯誤的,應該是相反的 - 首先執行查詢然后嘗試獲取.Value
除此之外,我不知道整個代碼,但在using
語句中包裝連接和命令是一個很好的做法。 如果你沒有充分的理由不這樣做,我建議你改變它。
PS 現在我看到您沒有傳遞UserID
值,至少在原始問題的代碼中是這樣。 所以一定要添加這個,在我的回答中是這一行: sqlcmd.Parameters["@UserID"].Value = userID;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.