KevinClaassens Ответов: 1

Как заполнить gridview результатами SQL-запроса


Я использую 3-уровневую архитектуру, и у меня возникли проблемы с отображением данных в gridview.

Я продолжаю получать ошибку "
Procedure or function 'spDisplayComplainant' expects parameter '@IDNum', which was not supplied
"но я не вижу, где я не предоставил удостоверение личности

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

В моем БЛЛ у меня есть

public List<Complainant> GetComplainantDetails(string idnum)
        {
            return db.GetComplainantDetails(idnum);
        }


Тогда в моем доступе к БД у меня есть

public List<Complainant> GetComplainantDetails(string idnum)
       {
           List<Complainant> comp = new List<Complainant>();
           Complainant co = null;
           SqlParameter[] pars = new SqlParameter[]
           {
               new SqlParameter("@IDNum", idnum),
           };
           using (DataTable table = DBHelper.ExecuteParamerizedSelectCommand("spDisplayComplainant", CommandType.StoredProcedure, pars))
           {
               if (table.Rows.Count > 0)
               {
                   foreach (DataRow row in table.Rows)
                   {
                       co = new Complainant();

                       co.ComplainantID = row["ComplainantID"].ToString();
                       co.FirstName = (row["FirstName"].ToString());
                       co.LastName = (row["LastName"].ToString());
                       co.Statement = (row["Statement"].ToString());
                       comp.Add(co);
                   }
               }
           }
           return comp;
       }


И тогда на страницу, где я хочу, чтобы отобразить в GridView

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //string txtSession = " ";
                if (Session["IDNumber"] == null)
                {

                }

                else
                {
                    string Id = Session["IDNumber"].ToString();
                    bll = new BusinessLogicLayer();
                    GridView1.DataSource = bll.GetComplainantDetails(Id);
                    GridView1.DataBind();

                    BindGrid();
                }
            }


        }


и моя хранимая процедура выглядит следующим образом

Выберите [ComplainantID], [FirstName], [LastName], [Statement]
ОТ ЗАЯВИТЕЛЯ
Где ComplainantID = @IDNum

1 Ответов

Рейтинг:
11

Karthik_Mahalingam

Цитата:
Процедура или функция 'spDisplayComplainant' ожидает параметр '@IDNum', который не был указан

Как правило, вы получаете эту ошибку, когда хранимая процедура принимает параметр, который имеет не обнуляемый тип а ты попробуй пройти null ценность для parameter.

это можно рассортировать по
изменение параметра процедуры на accept null значения как

CREATE PROCEDURE dbo.Sample_Procedure 
 (  @IDNum varchar(50) = null )
AS
begin
 SELECT [ComplainantID], [FirstName], [LastName], [Statement] 
FROM COMPLAINANT
WHERE ComplainantID = @IDNum
end


или
вы будете иметь, чтобы проверить idnum значение для non null value
 if( !String.IsNullOrEmpty(idnum)){
               
}


кроме того, вам нужно выяснить, почему значение idnum равно null на первом месте и закрепить его там.


Maciej Los

5ед!

Karthik_Mahalingam

Спасибо Мацей Лос

KevinClaassens

Огромное спасибо. Я нашел, где совершаю свою ошибку. Однако быстрый вопрос: как мне отобразить только те столбцы, которые я выбрал в своем запросе?

Karthik_Mahalingam

добро пожаловать ,
где вы хотите показать ?
управления GridView ? этикетка ?

KevinClaassens

Он должен отображаться в Gridview. Мой запрос должен отображать только эти 4 столбца [ComplainantID], [FirstName], [LastName], [Statement], но gridview отображает все столбцы из таблицы

Karthik_Mahalingam

добавьте эти столбцы в запрос select
выберите [ComplainantID], [FirstName], [LastName], [Statement] из yourtableName

KevinClaassens

Я сделал свой запрос выглядит так:
Выберите [ComplainantID], [FirstName], [LastName], [Statement]
ОТ ЗАЯВИТЕЛЯ
Где ComplainantID = @IDNum

Karthik_Mahalingam

хорошо.

KevinClaassens

Итак, как сделать так, чтобы gridview отображал только нужные столбцы?

Karthik_Mahalingam

просто назначьте datatable свойству girdview datasource, которое будет отображать выбранные столбцы.
girdview.источник данных = ДТ;
управления GridView.привязку();

KevinClaassens

Привет, я боролся с тем, чтобы сделать эту работу.

В моем классе dbAccess у меня есть публичный список & lt;истец> FillComplainant(string id)
{
Список & lt;жалобщик> Список = новый список & lt;жалобщик>();
SqlParameter[] pars = новый SqlParameter[]
{
новый SqlParameter ("@IDNum", id)
};
использование (DataTable table = DBHelper.ExecuteSelectCommand ("spDisplayComplainant", CommandType.Хранимая процедура))
{
если (табл. строк.Граф > 0)
{
foreach (строка DataRow в таблице.Строки)
{
Использование заявителя = новый заявитель();
использовать.ComplainantID = строка ["ComplainantID"].Метод toString();
список.Добавить (использовать);
}
} / / конец, если
} / / конец использования
список возврата;
}

И в моем БЛЛ у меня есть
публичный список & lt;истец> FillComplainant(string id)
{
возвращение дБ.FillComplainant(ИД);
}

Теперь, когда я пытаюсь привязать данные к сетке

Управления gridview1.Источник данных = блл.FillComplainant (Id);
Управления gridview1.Привязку();

Я получаю сообщение об ошибке "spDisplayComplainant" ожидает параметр "@IDNum", который не был указан.

Я не получаю его, когда на самом деле прохожу через параметр "IDNum"

Karthik_Mahalingam

Держите точку останова и посмотрите, что такое vale, который вы получаете в переменной id