Эффективные способы выгрузки значений из SQLDataReader в C#

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

При работе с базами данных на C# одной из распространенных задач является получение данных из базы данных SQL Server с помощью SQLDataReader и последующая обработка результатов. В этой статье мы рассмотрим различные методы эффективного получения значений из SQLDataReader и предоставим примеры кода для каждого подхода.

Метод 1: сброс значений в DataTable
Первый метод предполагает заполнение DataTable данными из SQLDataReader. Этот подход обеспечивает табличное представление данных, что упрощает работу и манипулирование ими.

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string query = "SELECT * FROM YourTable";
    SqlCommand command = new SqlCommand(query, connection);
    SqlDataReader reader = command.ExecuteReader();
    DataTable dataTable = new DataTable();
    dataTable.Load(reader);
    // Access and process the data in the DataTable
    foreach (DataRow row in dataTable.Rows)
    {
        // Process each row
        // Example: Console.WriteLine(row["ColumnName"]);
    }
}

Метод 2: выгрузка значений в список объектов
Другой подход заключается в создании специального класса, представляющего структуру данных, и заполнении списка объектов значениями из SQLDataReader. Этот метод полезен, если вы хотите работать со строго типизированными объектами.

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
// Add more properties as needed
}
List<Person> people = new List<Person>();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string query = "SELECT * FROM People";
    SqlCommand command = new SqlCommand(query, connection);
    SqlDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        Person person = new Person
        {
            Id = (int)reader["Id"],
            Name = (string)reader["Name"]
            // Set other properties accordingly
        };
        people.Add(person);
    }
}
// Access and process the data in the list of objects
foreach (Person person in people)
{
    // Process each person
    // Example: Console.WriteLine(person.Name);
}

Метод 3. Сброс значений в словарь.
Если вы хотите получить доступ к данным по парам «ключ-значение», вы можете выгрузить значения в словарь, используя имена столбцов в качестве ключей.

Dictionary<string, object> data = new Dictionary<string, object>();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string query = "SELECT * FROM YourTable";
    SqlCommand command = new SqlCommand(query, connection);
    SqlDataReader reader = command.ExecuteReader();
    if (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
        {
            string columnName = reader.GetName(i);
            object value = reader.GetValue(i);
            data[columnName] = value;
        }
    }
}
// Access and process the data in the dictionary
foreach (KeyValuePair<string, object> pair in data)
{
    string columnName = pair.Key;
    object value = pair.Value;
    // Process each key-value pair
    // Example: Console.WriteLine(columnName + ": " + value);
}

В этой статье мы рассмотрели три различных метода эффективного выгрузки значений из SQLDataReader в C#. В зависимости от ваших требований вы можете выбрать метод, который лучше всего соответствует вашим потребностям. Подход DataTable обеспечивает табличное представление, подход List of Objects хорошо работает со строго типизированными объектами, а подход Dictionary обеспечивает доступ по парам ключ-значение. Поэкспериментируйте с этими методами, чтобы найти тот, который подходит вашему конкретному сценарию.

Не забывайте обрабатывать исключения, правильно управлять подключениями к базе данных и оптимизировать запросы для повышения производительности.

Используя эти методы, вы можете эффективно получать и обрабатывать данные из SQLDataReader на C#.