Самый эффективный способ вернуть ИСПОЛЬЗОВАТЬ однострочный запрос из SQL Server? - PullRequest
0 голосов
/ 26 ноября 2010

Я использую c # и SQL Server для получения данных из базы данных и заполнения нескольких меток на странице при загрузке страницы. Информация поступает из представления SQL, которое возвращает целую кучу информации в одной строке. например:

SELECT 'car' AS product, 12 As daysUntilEOM, '2010-01-01' AS LastHoliday, 23.7 AS Length

Всегда будет возвращаться только 1 строка

Остальная часть моего проекта использует LINQ, и я изначально начал идти по этому пути, но какой смысл создавать объект, который я собираюсь использовать только один раз для этого, назначая все значения объекту как пары ключ-значение, а затем переназначить их на текст метки? Кажется, много бессмысленного кодирования.

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

Самое простое решение (т.е. наименьший код), которое я вижу, состоит в том, чтобы использовать dataAdapter, чтобы заполнить набор данных и передать набор данных обратно из DAL на страницу, а затем выполнить назначение прямо меткам. Но для одного ряда данных это похоже на использование грузовика для перевозки одного помидора.

Есть ли что-то вроде ExecuteScalar, которое возвращает целую строку, а не только первый столбец? Или должно быть достаточно простоты написания DataAdapter, и я должен перестать беспокоиться о накладных расходах?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 26 ноября 2010

Вы должны позвонить ExecuteReader и передать флаг CommandBehavior.SingleRow.

Чтобы избежать связывания, вы можете преобразовать DataReader в словарь, например:

return Enumerable.Range(0, reader.FieldCount)
                 .ToDictionary(reader.GetName, reader.GetValue);
0 голосов
/ 26 ноября 2010

ExecuteScalar возвращает скалярное значение, а не строку.DataAdapter с объектом команды (возможно, также передающий параметр хранимому процессу вместо выполнения оператора sql) будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...