WedX - журнал о программировании и компьютерных науках

Передача pColumns с пробелом в качестве параметров в ExecuteSqlRaw

Я пытаюсь выполнить хранимую процедуру, используя ExecuteSqlRaw. Обычные параметры выполняются правильно, но когда я попытался выполнить хранимую процедуру с обязательным параметром, как показано ниже

List<SqlParameter> Params = new List<SqlParameter>
    {
        new SqlParameter("ContactEMail", "[email protected]"),
        new SqlParameter("Name", "test" ),
        new SqlParameter("Password", "test"),
    };
SqlParameter[] parameters1 = Params.ToArray();
var res = cn.ExecuteSqlRaw("Tool_CreateCustomer  @ContactEMail, @Name, @Password", parameters1);
  

и столбец базы данных выглядит так:

введите здесь описание изображения

Я получаю эту ошибку:

Microsoft.Data.SqlClient.SqlException (0x80131904): процедура или функция «CreateCustomer» ожидает параметр «@Name», который не был предоставлен.

введите здесь описание изображения

Выполнение в SQL работает введите здесь описание изображения


  • Обновленный код по-прежнему недействителен. Опубликуйте фактический код, вызвавший эту ошибку 31.08.2020
  • Я собираюсь предположить, что параметры1 - это ваш список SqlParameter с именем Params. var res = cn.ExecuteSqlRaw(Tool_CreateCustomer, параметры1); 31.08.2020
  • Извините, что опечатка. Обновили код сейчас 31.08.2020
  • Извините, это был мой клиентский SP, и он был зашифрован! :| Я запросил ключ дешифрования, как только получу его, я поделюсь определением здесь 31.08.2020
  • Пожалуйста, проверьте, загрузили ли определение 31.08.2020
  • Должны ли все параметры передаваться из определения? 31.08.2020
  • Вы пробовали мой предыдущий комментарий? 31.08.2020
  • @ t00n Да пробовал, выдает {Процедура или функция 'Tool_CreateCustomer' ожидает параметр '@ContactEMail', который не был предоставлен.} при попытке передать список параметров напрямую var res = cn.ExecuteSqlRaw(Tool_CreateCustomer, parameters1); 31.08.2020

Ответы:


1

Вы передаете только 3 из 5 параметров И не используете правильный метод для обработки необязательных параметров. Если вы хотите передать только 3 параметра (и параметры вашей хранимой процедуры определены по умолчанию), измените свой код с:

Tool_CreateCustomer @ContactEMail, @Name, @Password;

к следующему, где вы явно указываете SQL Server, какие параметры вы предоставляете

Tool_CreateCustomer @ContactEMail = @ContactEMail, @Name = @Name, @Password = @Password;

Вы можете подумать, что SQL Server может сделать вывод, какой параметр есть какой в ​​вашем коде, но на самом деле, когда вы опускаете назначение, он просто сопоставляет их в порядковом порядке. Вы можете назвать свои параметры как угодно в обоих примерах, в первом примере они отображаются по порядку, а во втором вы их отображаете.

Официальная ссылка

31.08.2020
  • Имя столбца ContactEMail имеет пробел (Contact E Mail) в столбце, нужно ли нам добавлять пробел при передаче параметров? 31.08.2020
  • @Dah Насколько важны имена столбцов при вызове SP? Имена параметров не имеют отношения к именам столбцов. В вашей подписи нет пробелов, поэтому пробелы не нужны. А еще лучше - просто попробуйте :) 31.08.2020
  • @DahSra - как у тебя дела? 31.08.2020
  • Нет. Извините, я слишком наивен. Теперь этот подход не вызывает никаких ошибок после передачи всех параметров, но возвращаемое значение равно -1 :( 31.08.2020
  • @DahSra это означает, что в самой SP (или с переданными значениями параметров) есть ошибка, в любом случае T-SQL в SP не работает должным образом. Но он был успешно вызван. Это отдельный вопрос от вашего вопроса. Способ, которым вы должны справиться с этим, - принять этот ответ, поскольку он решает опубликованную проблему и задать новый вопрос. Вопросы SO не предназначены для сеансов отладки. 31.08.2020
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]