Skip to content

Instantly share code, notes, and snippets.

@pedroinfo
Last active January 12, 2026 15:24
Show Gist options
  • Select an option

  • Save pedroinfo/a1d76c98eab40c08bde809676509e125 to your computer and use it in GitHub Desktop.

Select an option

Save pedroinfo/a1d76c98eab40c08bde809676509e125 to your computer and use it in GitHub Desktop.
DatabaseConnection.cs
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using Dapper;
namespace Infrastructure.Database
{
// ================================
// 1. Enum
// ================================
public enum Database
{
Main,
Reporting,
Finance,
Legacy
}
// ================================
// 2. DatabaseMap (resolve direto do config)
// ================================
public static class DatabaseMap
{
public static string Get(Database database)
{
string name;
switch (database)
{
case Database.Main:
name = "SQL_ERP_PROD";
break;
case Database.Reporting:
name = "SQL_REPORTING";
break;
case Database.Finance:
name = "SQL_FIN";
break;
case Database.Legacy:
name = "SQL_LEGACY_2008";
break;
default:
throw new InvalidOperationException(
"Database not mapped: " + database);
}
var cs = ConfigurationManager.ConnectionStrings[name];
if (cs == null)
throw new InvalidOperationException(
"Connection string not found: " + name);
return cs.ConnectionString;
}
}
// ================================
// 3. DatabaseConnection
// ================================
public sealed class DatabaseConnection
{
private readonly string _connectionString;
public DatabaseConnection(Database database)
{
_connectionString = DatabaseMap.Get(database);
}
private IDbConnection Open()
{
var conn = new SqlConnection(_connectionString);
conn.Open();
return conn;
}
// ------------------------
// Dapper
// ------------------------
public IEnumerable<T> Query<T>(string sql, object param = null)
{
using (var conn = Open())
return conn.Query<T>(sql, param);
}
public T QuerySingleOrDefault<T>(string sql, object param = null)
{
using (var conn = Open())
return conn.QuerySingleOrDefault<T>(sql, param);
}
public int Execute(string sql, object param = null)
{
using (var conn = Open())
return conn.Execute(sql, param);
}
public T Scalar<T>(string sql, object param = null)
{
using (var conn = Open())
return conn.ExecuteScalar<T>(sql, param);
}
// ------------------------
// DataTable
// ------------------------
public DataTable QueryDataTable(string sql, object param = null)
{
using (var conn = Open())
using (var reader = conn.ExecuteReader(sql, param))
{
var table = new DataTable();
table.Load(reader);
return table;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment