System.data.sqlclient.sqlexception: процедура или функция 'COMPANY_CHANGE_PASS' ожидает параметр '@password', который не был указан.
<pre lang="c#"> this._commandCollection[1].CommandText = "dbo.COMPANY_CHANGE_PASS"; this._commandCollection[1].CommandType = global::System.Data.CommandType.StoredProcedure; this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@RETURN_VALUE", global::System.Data.SqlDbType.Int, 4, global::System.Data.ParameterDirection.ReturnValue, 10, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PASSWORD", global::System.Data.SqlDbType.NVarChar, 100, global::System.Data.ParameterDirection.Input, 0, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); this._commandCollection[2] = new global::System.Data.SqlClient.SqlCommand(); this._commandCollection[2].Connection = this.Connection;
Что я уже пробовал:
<pre lang="c#"> this._commandCollection[1].CommandText = "dbo.COMPANY_CHANGE_PASS"; this._commandCollection[1].CommandType = global::System.Data.CommandType.StoredProcedure; this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@RETURN_VALUE", global::System.Data.SqlDbType.Int, 4, global::System.Data.ParameterDirection.ReturnValue, 10, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PASSWORD", global::System.Data.SqlDbType.NVarChar, 100, global::System.Data.ParameterDirection.Input, 0, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); this._commandCollection[2] = new global::System.Data.SqlClient.SqlCommand(); this._commandCollection[2].Connection = this.Connection;
j snooze
Вы проверили, что ваш список параметров совпадает со списком параметров хранимой процедуры и в правильном порядке? какой-то код, кажется, отсутствует, так как я не вижу, где на самом деле выполняется оператор, похоже, что вы пытаетесь создать кучу SQL-команд в коллекцию команд, а затем вы должны перебирать их для выполнения?
sommr0
Изменить процедуру [dbo].[COMPANY_CHANGE_PASS]
-- Добавьте параметры для хранимой процедуры здесь
@Password NVARCHAR(50)
АС
НАЧАТЬ
-- Установить параметр nocount на добавленную предотвратить дополнительные результирующие наборы
-- вмешательство в операторы SELECT.
УСТАНОВИТЕ NOCOUNT ON;
-- Вставьте инструкции для процедуры здесь
Обновление COMPANYMST SET Password=@Password
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
sommr0
Это процедура, но процедура работает должным образом ...
j snooze
вы пробовали добавить параметр пароля в качестве первого параметра?...и фактически единственный параметр...Я также нигде не вижу возвращаемой переменной значения.
sommr0
как это возможно??
Dave Kreskowiak
Это самый уродливый код, который я видел за долгое время. Есть так много вещей, которые делают его почти невозможным для чтения, не говоря уже об отладке.
sommr0
но это отлаживается правильно
Dave Kreskowiak
Да неужели? Тогда почему вы задали этот вопрос? В этом коде так много дублирования и ненужного текста, что вам, вероятно, потребовалось в 20 раз больше времени, чтобы напечатать все это, чем следовало.
Вы серьезно сделали код настолько трудным для чтения, что он стал бесполезным. Никого не волнует, правильно ли он компилируется или правильно выполняется и выполняет свою работу.
Этот код непригоден.
Самое страшное, что это всего лишь небольшой образец кода во всем приложении. Если все приложение выглядит так, то мне бы очень не хотелось быть человеком, который заходит за вами и должен поддерживать эту дымящуюся кучу ....
Dave Kreskowiak
using System.Data; using System.Data.SqlClient; . . . SqlCommand comm = new SqlCommand(connectionObject); comm.CommandText = "dbo.COMPANY_CHANGE_PASS"; comm.CommandType = CommandType.StoredProcedure; // RETURN VALUE parameter removed as the stored procedure doesn't return a value passwordParameter = new SqlParameter("@Password", SqlDbType.NVarChar, 100); passwordParameter.Value = "newPassword"; comm.Parameters.Add(passwordParameter); // commandCollection[2] stuff removed as it has nothing to do with the above code. // The entire commandCollection array concept is probably a bad idea in the first place // as there are much better ways of caching the command objects and using them.
Richard Deeming
НИКОГДА храните пароли в виде простого текста!
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хеширование паролей - все правильно[^]