Я сделал хранимую процедуру для пользователей, чтобы войти в приложение, но независимо от того, что я пытался и смотрел много руководств по хранимым процедурам, мне не удалось вернуть значения.
Я также пытался с выходными параметрамиполучить значения обратно, а также попытался с DatarReader, но значения не назначены.Отладка по какой-то причине игнорирует значения объекта.
В SQL Server с некоторым методом DECLARE
, который я пытался сохранить, похоже, работает, но в C # я не получаю значений.
это первая хранимая процедура:
ALTER PROCEDURE spAddUser
@pLogin NVARCHAR(50),
@pPassword NVARCHAR(50),
@pRole nvarchar(20)
AS
BEGIN
INSERT INTO [UsersDetails] (LoginName, PasswordHash, UserRole)
VALUES(@pLogin, HASHBYTES('SHA2_512', @pPassword), @pRole)
END;
CREATE PROCEDURE [dbo].[spLogin]
@uname NVARCHAR(50),
@pass VARCHAR(50)
AS
BEGIN
SELECT LoginName,[PasswordHash],UserRole
FROM UsersDetails
WHERE LoginName=@uname AND [PasswordHash]=@pass
END;
GO
Console.WriteLine("Enter Username and Password to Login");
string userLogin = Console.ReadLine();
string passwordLogin = Console.ReadLine();
SqlCommand cmdLogin = new SqlCommand();
cmdLogin.Connection = sqlcon;
cmdLogin.CommandType = CommandType.StoredProcedure;
cmdLogin.CommandText = "spLogin";
cmdLogin.Parameters.Add(new SqlParameter("@uname", SqlDbType.NVarChar)).Value = userLogin;
cmdLogin.Parameters.Add(new SqlParameter("@pass", SqlDbType.NVarChar)).Value = passwordLogin;
cmdLogin.Parameters["@uname"].Direction = ParameterDirection.ReturnValue;
SqlDataReader loginReader = cmdLogin.ExecuteReader();
while (loginReader.Read())
{
User user = new User
{
ID = loginReader.GetInt32(0),
LoginName = loginReader.GetString(1),
PasswordHash = loginReader.GetString(2)
};
Console.Write(user);
}
loginReader.Close();