簡體   English   中英

如何從 SQL 存儲過程返回輸出 varchar 值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM