sommr0 Ответов: 0

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.

0 Ответов