ODBC でも Dapper

.NET Core からは ODBC で接続するしかない古過ぎる SQL Server 相手でも、System.Data.Odbc だったら Dapper が使えた。

www.nuget.org

www.nuget.org

using var connection = new OdbcConnection(connectionString);
connection.Open();

// ODBC で名前付きパラメータが使えるのはストアドプロシージャだけだったので、
// 通常の SQL では 1 から始まるパラメータ名をつける必要がある。
var param = new DyamicParameters();
param.Add("@1", DateTime.Today.AddMonths(-1));
param.Add("@2", DateTime.Today);

// ODBC ではパラメータをバインドする箇所には ? を使う。
var result = connection.Query<Book, Author, Book>(
    sql: @"SELECT *
           FROM Books AS b
           INNER JOIN Authors AS a
                   ON b.AuthorId = a.Id
           WHERE b.PublishedOn BETWEEN ? AND ?
           ORDER BY b.PublishedOn",
    map: (book, author) =>
    {
        book.Author = author;
        return book;
    },
    splitOn: "Id",
    param: param);

ちなみに、Entity Framework Core は ODBC 無理だった。困ったときは Dapper だな。