Member 8583441 Ответов: 2

Процедура или функция "имя процедуры" ожидает параметр "@comments", который не был указан.


Я использую asp.net для чего у меня есть база данных, в которую один из моих полевых комментариев имеет тип данных varchar(max) в SQL Server 2012, и значение также может быть вставлено null. В базе данных нет никаких проблем с вставкой в таблицу базы данных при переходе к asp.net используя хранимую процедуру, я не даю никакой информации в текстовом поле, что означает пустую строку. Я получаю ошибку "Процедура или функция "имя процедуры" ожидает параметр "@Comments", который не был указан."

Что я уже пробовал:

Столбец базы данных:
[Comments] VARCHAR (MAX) NULL

Код .Net:
string commentsText = (!string.IsNullOrEmpty(txtComments.Text)) ? txtComments.Text : null

Команда Addwithvalue:
cmd.Parameters.AddWithValue("@Comments", commentsText);

Получение ошибки в этой строке:
cmd.ExecuteNonQuery();

Animesh Datta

Поместите свой полный код C#

Member 8583441

строка spAddOrUpdateUser = "имя процедуры пользователя";
using (cmd = new SqlCommand(spAddOrUpdateUser, con))
{
УМК.CommandType = CommandType.Хранимая процедура;

/* добавление параметров в SqlCommand ниже */
cmd.параметры.AddWithValue("@StatementType", "Insert");
cmd.параметры.AddWithValue("@EmpID", empID);
cmd.параметры.AddWithValue("@NumberOfDays", txtNoOfDays.Text);
cmd.параметры.AddWithValue("@LeaveFromDate", txtStartDate.Text);
cmd.параметры.AddWithValue("@LeaveToDate", txtEndDate.Text);
cmd.параметры.AddWithValue("@CreatedOn", DateTime.Now);
cmd.параметры.AddWithValue("@TypeOfLeave", leaveTypes);
cmd.параметры.AddWithValue("@StatusOfLeave", "В Ожидании...");
cmd.параметры.AddWithValue("@ReasonForLeave", txtReasonofLeave.Text);

// txtComments.Text == "" ? null : txtComments.Текст;
cmd.параметры.AddWithValue ("@Comments", commentsText);

// выходной параметр
cmd.Parameters.Add("@ResponseMessage", SqlDbType.NVarChar, 250);
cmd.Parameters["@ResponseMessage"].Направление = ParameterDirection.Выход;

против.Открыть();
УМК.Метод executenonquery();
против.Закрывать();

lblUserLeavesMessage.Text = cmd.Parameters["@ResponseMessage"].Value.Метод toString();
}

Member 8583441

Проблема Решена.....

2 Ответов

Рейтинг:
9

Member 8583441

Проблема заключается в том, что в базе данных я включил метод ISNULL() для столбца, который мне нужен в хранимой процедуре, это значение устанавливается в столбец.


Рейтинг:
1

OriginalGriff

Ошибка означает, что у вас есть хранимая процедура, которая нуждается в параметре под названием @Comments и что этот параметр не может быть нулевым значением, что именно то, что вы передаете, если пользователь ничего не вводит:

string commentsText = (!string.IsNullOrEmpty(txtComments.Text)) ? txtComments.Text : null;
Вместо этого попробуйте всегда передавать строку:
cmd.Parameters.AddWithValue("@Comments", txtComments.Text.Trim());
И это должно сработать, потому что свойство Text текстового поля никогда не может быть нулевым.