Два запроса к двум спискам?

1

На данный момент у меня есть это, что отлично работает:

using (connection = new SqlConnection("connection string here"))
{
    using (command = new SqlCommand(@"select * from tbl1", connection))
    {
        connection.Open();
        using (reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                int ColIndex1 = reader.GetOrdinal("col_1");
                int ColIndex2 = reader.GetOrdinal("col_2");

                Console.Write(reader.GetString(ColIndex1);
                Console.Write(" - ");
                Console.Write(reader.GetString(ColIndex2);
                Console.Write(Environment.NewLine);
            }
        }
    }
}

У меня есть еще один запрос, который я запускаю отдельно, но для второго запроса нужен первый запрос, а это значит, что я дважды запускаю первый запрос. Чтобы этого избежать, если я изменил командную строку на:

using (command = new SqlCommand(@"select * from tbl1; select * from tbl2", connection))

Как получить каждый запрос в отдельный список? Я понимаю, как получить один запрос в списке, то есть:

public class Data
{
    public int ColumnIndex1 { get; set; }
    public int ColumnIndex2 { get; set; }
}

List<Data> list = new List<Data>();

list.Add(new Data(ColIndex1, ColIndex2));

Первый запрос используется для создания каталогов на жестком диске. Второй запрос затем использует первый запрос, а затем добавляет файлы в созданные каталоги.

  • 0
    Как две таблицы похожи? У них точно такие же столбцы?
  • 0
    «но этот второй запрос нуждается в первом запросе» - каким именно образом ?
Показать ещё 3 комментария
Теги:

2 ответа

2
Лучший ответ
using (connection = new SqlConnection("connection string here"))
{
    using (command = new SqlCommand(@"select * from tbl1", connection))
    {
        connection.Open();
        using (reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                // read first grid
            }
            if(reader.NextResult())
            {
                while (reader.Read())
                {
                    // read second grid
                }
            }
        }
    }
}

Однако я настоятельно рекомендую использовать вспомогательные инструменты, например, через "dapper":

List<FirstType> first;
List<FirstType> second;
using(var multi = connection.QueryMultiple(sql, args))
{
    first = multi.Read<FirstType>().ToList();
    second = multi.Read<SecondType>().ToList();
}
0

Я думаю, вам нужно исследовать метод NextResult на интерфейсе IDataReader. Это позволяет вам перемещаться по множеству наборов результатов.

http://msdn.microsoft.com/en-us/library/system.data.idatareader.nextresult(v=vs.110).aspx

Ещё вопросы

Сообщество Overcoder
Наверх
Меню