Как правильно вызвать и получить результат хранимой процедуры из БД MS SQL, чтобы потом обработать его в коде Winforms?
Сама процедура:
CREATE PROCEDURE [dbo].[Authentification](@login as nvarchar(15),@password as nvarchar(64), @Answer NVARCHAR(max) OUTPUT)
IF (Select count(*) from Users where Users.Login = @login AND Users.Password = @password) = 0 SET @Answer = 'Отсутствует в базе' Return @Answer
IF (Select count(*) from Users where Users.Login = @login AND Users.Password = @password) = 1 SET @Answer = 'Присутствует в базе Return @Answer
При попытке получить результат вот так:
sqlDataAdapter = new SqlDataAdapter("SELECT * from Users", sqlConnection);
sqlBuilder = new SqlCommandBuilder(sqlDataAdapter);
dataSet = new DataSet();
sqlDataAdapter.Fill(dataSet, "Users");
SqlCommand CheckAuth = new SqlCommand("Authentification", sqlConnection);
CheckAuth.CommandType = CommandType.StoredProcedure;
CheckAuth.Parameters.Add("@login", SqlDbType.VarChar).Value = AuthLogin.Text;
CheckAuth.Parameters.Add("@password", SqlDbType.VarChar).Value = Verification.GetSHA256Hash(AuthPassword.Text);
CheckAuth.Parameters.Add("@Answer", SqlDbType.VarChar).Value = "";
//sqlConnection.Open();
var result = CheckAuth.ExecuteScalar().ToString();
Выдаёт ошибку преобразования Nvarchar to int.
Ответы (1 шт):
Автор решения: Bulson
→ Ссылка
Как-то так, показываю только для выходного параметра процедуры
var answer = new SqlParameter("@Answer", SqlDbType.NVarChar);
answer.Direction = System.Data.ParameterDirection.Output;
CheckAuth.Parameters.Add(answer);
CheckAuth.ExecuteNonQuery();
var res = answer.Value.ToString();
Ну, а дальше используйте res.