преобразование набора результатов из OleDbDataReader в список - PullRequest
0 голосов
/ 03 ноября 2010

Рассмотрим приложение Winforms, подключающееся к базе данных SQL Server 2008 и выполняющее оператор SQL SELECT:

string myConnectionString = "Provider=SQLOLEDB;Data Source=hermes;Initial Catalog=qcvaluestest;Integrated Security=SSPI;";

string mySelectQuery = "SELECT top 500 name, finalconc from qvalues where rowid between 0 and 25000;";

OleDbConnection myConnection = new OleDbConnection(myConnectionString);

OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);

myCommand.Connection.Open();

OleDbDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);

Как вы можете прочитать результаты запроса в список?

Ответы [ 3 ]

2 голосов
/ 03 ноября 2010

Вы можете попробовать что-то как (адаптируйте для вашего удобства):

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

List<Person> dbItems = new List<Person>();

while(myReader.Read())
{
   Person objPerson = new Person();

   objPerson.Name = Convert.ToString(myReader["Name"]);
   objPerson.Age = Convert.ToInt32(myReader["Age"]);

   dbItems.Add(objPerson);
}
2 голосов
/ 03 ноября 2010

Предположим, вы определили класс, похожий на

class MyData
{
    public string Name {get; set;}
    public int FinalConc {get; set;} // or whatever the type should be
}

Вы бы перебрали результаты вашего запроса, чтобы загрузить список.

List<MyData> list = new List<MyData>();
while (myReader.Read())
{
    MyData data = new MyData();
    data.Name = (string)myReader["name"];
    data.FinalConc = (int)myReader["finalconc"]; // or whatever the type should be
    list.Add(data);
}

// work with the list

Если вам просто нужно одно из указанных полей, вы можете отказаться от определения класса и просто иметь List<T>, где T - это тип любого поля, которое вы хотите сохранить.

1 голос
/ 03 ноября 2010

Список чего?У вас есть настройка класса, которая имеет свойства для name и finalconc?Скажем, вы делаете, и это выглядит так:

public class QueryResult
{
    public string Name { get; set; }
    //not sure what finalconc type would be, so here just using string
    public string FinalConc { get; set; }
}

Тогда вы бы сделали что-то вроде этого:

var queryResults = new List<QueryResult>();
using(var myReader = myCommand.ExecuteReader())
{
    while(myReader.Read())
    {
        queryResults.Add(new QueryResult
            { 
                Name = myReader.GetString(myReader.GetOrdinal("name")), 
                FinalConc = myReader.GetString(myReader.GetOrdinal("finalconc"))
            });
    }
}
...