Заполнить ArrayList из набора результатов хранимой процедуры - PullRequest
2 голосов
/ 30 августа 2011

У меня есть хранимая процедура, которая возвращает набор целых чисел.Мне нужна помощь в заполнении ArrayList этих результатов в веб-приложении на C # (VS 2005).

Я понимаю, что это, вероятно, очень простой процесс, но у меня нет ни навыков, ни словаря для его изучения, по-видимому.

Я предполагаю, что этот DataTable заполняетсяправильно:

public static DataTable GetAllVendors()
{
     OleDbCommand cmd = Data.GetCommand(Configuration.DatabaseOwnerPrefix + ".GetAllInformationAndHelpVendorIds", Connections.MyDbConnection);
     return Data.RunCommand(cmd).Tables[0];
 }

Чего я не знаю, так это как вернуть результаты в ArrayList или другой тип данных, который можно оценить с помощью метода Contains ().

Редактировать: ArrayListЭто старая технология, и я воспользуюсь ее советом.Благодаря.

Ответы [ 3 ]

4 голосов
/ 30 августа 2011

Что вам нужно сделать, это вызвать ExecuteReader() для этого cmd объекта, например:

public static IEnumerable<int> GetAllVendors()
{
    using (var cmd = Data.GetCommand(Configuration.DatabaseOwnerPrefix + ".GetAllInformationAndHelpVendorIds", Connections.MyDbConnection))
    {
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                yield return reader.GetInt32(0);
            }
        }
    }
}

Это предполагает, что SQL вернет таблицу, первый столбец которой (идентифицированный индексом * 1006)* к методу GetInt32()) будет идентификатор, который вы ищете.Если SQL возвращает идентификаторы в другом столбце, просто настройте индекс для столбца, в котором вы ожидаете их найти.

Это решение также предполагает, что соединение команды уже открыто.Если это не так, вы можете сделать cmd.Connection.Open() непосредственно перед cmd.ExecuteReader().

2 голосов
/ 30 августа 2011

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

В SQL Server 2008 вы можете пойти противоположным путем - передать свой список в табличный параметр и выполнить фильтрацию на сервере.

В SQL Server 2005 вы могли бы использовать несколько менее эффективные способы для симуляции одного и того же: передать разделенный запятыми список значений в хранимую процедуру, затем хранимая процедура анализирует список и создает таблицу или непосредственно объединяется с исходной таблицы, тогда набор результатов по-прежнему фильтруется вместо всего запроса.

1 голос
/ 30 августа 2011

Как насчет этого:

public static IList GetAllVendors()
{
     OleDbCommand cmd = Data.GetCommand(Configuration.DatabaseOwnerPrefix + ".GetAllInformationAndHelpVendorIds", Connections.MyDbConnection);
     return Data.RunCommand(cmd).Tables[0].AsEnumerable().ToList();
}

Подробнее здесь как конвертировать данные в общий список

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