У меня есть хранимая процедура, которая выглядит следующим образом:
ALTER PROCEDURE [dbo].[AuthenticateUser]
@AzUserName varchar(20),
@Hash varchar(32),
@UserId bigint output,
@Authorized bit output
...
и отлично работает в Management Studio.
Вот мой код C #:
SqlConnection scon = new SqlConnection(connectionString);
SqlCommand authCmd = new SqlCommand("AuthenticateUser", scon);
authCmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlParameter userNameParam = authCmd.Parameters.Add("@AzUserName", System.Data.SqlDbType.VarChar, 20);
userNameParam.Value = username;
string hashed = Md5Hash.ComputeHash(username);
SqlParameter hashedParam = authCmd.Parameters.Add("@Hash", System.Data.SqlDbType.VarChar, 32);
hashedParam.Value = hashed;
SqlParameter userIdParam = authCmd.Parameters.Add("@UserId", System.Data.SqlDbType.Int);
userIdParam.Direction = System.Data.ParameterDirection.ReturnValue;
SqlParameter authorizedParam = authCmd.Parameters.Add("@Authorized", System.Data.SqlDbType.Bit);
authorizedParam.Direction = System.Data.ParameterDirection.ReturnValue;
scon.Open();
authCmd.ExecuteNonQuery();
scon.Close();
Когда я запускаю его, я получаю следующую ошибку:
{"Procedure or function 'AuthenticateUser' expects parameter '@UserId', which was not supplied."} System.Exception {System.Data.SqlClient.SqlException}
Когда я заменяю ParameterDirection.ReturnValue на ParameterDirection.Output, я не получаю сообщение об ошибке, но никогда не получаю значение процедуры.
UPDATE:
Спасибо за вашу помощь. Ошибка была более тривиальной, чем вы могли подумать, и я описал этот вопрос. Я менял взад и вперед ReturnValue на Output довольно давно сегодня безрезультатно. Затем мне пришлось опубликовать свой вопрос на SO, чтобы понять, что я принимаю хэш-значение ... username..Выйду на улицу, чтобы получить немного кислорода.