Skip to content

Example.DbDataMapper

IzayoiJiichan edited this page Aug 16, 2024 · 5 revisions

Examples

DbDataMapper

using System.Collections.Generic;
using System.Threading.Tasks;
using Izayoi.Data;
using Microsoft.Data.SqlClient;  // for SQL Server
//using Microsoft.Data.Sqlite;   // for SQLite
//using MySqlConnector;          // for MySQL
//using Npgsql;                  // for PostgreSQL

public class Example()
{
    private readonly dbConnectionString;

    private readonly DbDataMapper dbDataMapper = new();

    public async Task<List<User>> GetUsers(CancellationToken cancellationToken)
    {
        using SqlConnection dbConnection = new(dbConnectionString);

        using SqlCommand dbCommand = dbConnection.CreateCommand();

        dbConnection.Open();

        List<User> users;

        // Select method A
        {
            dbCommand.CommandText = "SELECT * FROM users";

            using SqlDataReader dbDataReader = await dbCommand.ExecuteReaderAsync(cancellationToken);

            users = await dbDataMapper.ReadToObjectsAsync<User>(dbDataReader, cancellationToken);
        }
        // Select method B
        {
            dbCommand.CommandText = "SELECT * FROM users";

            users = await dbDataMapper.ExecuteQueryAsync<User>(dbCommand, cancellationToken);
        }
        // Select method C
        {
            users = await dbDataMapper.SelectAllAsync<User>(dbCommand, cancellationToken);
        }

        dbConnection.Close();

        return users;
    }

    public async Task<User?> GetUser(int userId, CancellationToken cancellationToken)
    {
        using SqlConnection dbConnection = new(dbConnectionString);

        using SqlCommand dbCommand = dbConnection.CreateCommand();

        dbConnection.Open();

        dbCommand.CommandText = "SELECT * FROM users WHERE id = @id";

        dbCommand.Parameters.Add(new SqlParameter("@id", System.Data.SqlDbType.Int) { Value = userId });

        using SqlDataReader dbDataReader = await dbCommand.ExecuteReaderAsync(cancellationToken);

        User? user = await dbDataMapper.ReadToObjectAsync<User>(dbDataReader, cancellationToken);

        dbConnection.Close();

        return user;
    }
}

Database

Example.Database

Mapping Classes

Example.Map_Class

Clone this wiki locally