SqlDataReader.ExecuteReader ();возвращение нулевого объекта, даже если указаны все параметры - PullRequest
0 голосов
/ 12 февраля 2019
SqlConnection connection = Connect();

SqlCommand command = new SqlCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = sprocName;
command.Connection = connection;
//loop through the dictionary
foreach (string key in paramList.Keys)
{
        command.Parameters.AddWithValue(key, paramList[key]);
}
SqlDataReader dataReader = command.ExecuteReader();

Я пытаюсь прочитать данные из базы данных, когда я передаю те же параметры и выполняю SP, тогда я получаю правильный результат. Но здесь SqlDataReader dataReader = command.ExecuteReader();, когда я проверяю (dataReader.HasRows), он возвращает false!

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Exec up_GetAtt @ pageNumber = 1, @ pagesize = 10, @ PID = 1000, @ DeID = NULL, @DeName = NULL, @ SortByColumn = 'ReleaseDate', @ SortOrder = 'DESC' это параметрыЯ передаю

Вам необходимо преобразовать нулевые значения C # в DBNull

SqlConnection connection = Connect();

SqlCommand command = new SqlCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = sprocName;
command.Connection = connection;
//loop through the dictionary
foreach (string key in paramList.Keys)
{
        command.Parameters.AddWithValue(key, paramList[key] == NULL? DBNull.Value : paramList[key]);
}
SqlDataReader dataReader = command.ExecuteReader();

Учитывая отсутствие информации, которая поможет вам лучше, проверьте также на наличие распространенных ошибок

  • Опечатки в именах процедур и параметров
  • Отправка запроса с помощью CommandType.StoredProcedure: значение sprocName должно быть просто "up_GetAtt", это распространенная ошибка, включающая слово или параметры EXEC.
  • Проверьте типы значений, ваш paramList должен быть словарем, а тип значений элементов, помещаемых в этот список, должен совпадать с эквивалентным типом sql, не все типы имеют неявное преобразование.
  • Проверка обнуляемостиэлементы paramList, используйте nullable int и datetime
  • Убедитесь, что имена параметров начинаются с @
  • Пропуск параметра не означает, что он имеет значение null, если только ваш store storeопределение edure по умолчанию оно равно null
  • Пропуск параметра без значения по умолчанию в определении процедуры
  • Ненужное цитирование значений, вы отправляете значения параметров, это не конкат
0 голосов
/ 12 февраля 2019

Содержит ли ваш ключ '@', например, если имя ключевого параметра EmployeeId , то необходимо добавить параметр, как показано ниже

commnad.Parameters.AddWithValue('@EmployeeId', 1);
...