Похоже, что код из вашего вопроса не является реальным кодом, над которым вы работаете, поэтому могут быть и другие причины, по которым вы не вернете свою ценность.
Однако, судя по тому, что я вижу, если вы немного измените 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;