Misc tools
$ dotnet add package AlemvikLibrary in .Net 6 with C# 10. It packs many [mostly] static features.
{
"DataSources": [
{ "MySqlSrvA": { "MySql.Data.MySqlClient": "DataSource=localhost;port=3306;Database=Skillango;uid=root;pwd=secret" } }
]
}
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.IO;
using System.Linq;
using Microsoft.Extensions.Configuration;
using Alemvik;
public static readonly IConfiguration config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
static void InitDatabase() {
DbProviderFactories.RegisterFactory("MySql.Data.MySqlClient", MySql.Data.MySqlClient.MySqlClientFactory.Instance);
List<(string nme, string ado, string con)> dataSources = config.GetSection("DataSources")
.Get<Dictionary<string, Dictionary<string, string>>[]>() // make sure you included Microsoft.Extensions.Configuration.Binder
.SelectMany(i => i)
.Select(i => ValueTuple.Create(i.Key, i.Value.First().Key, i.Value.First().Value))
.ToList();
Db.Init(dataSources); // or direct: Db.Init(new Emvie.DataSource[] { new("MySqlSrvA", "MySql.Data.MySqlClient", "DataSource=localhost;port=3306;Database=Skillango;uid=root;pwd=secret") });
}
static void TestMySql() {
var tbl = Db.ToTbl("MySqlSrvA", 0, "select Name, Manager, Title from Skillango.User order by Name limit 25;", EFillOption.Data, 0, 15);
foreach (DataRow dr in tbl.Rows) Console.WriteLine($"{dr[0]}{new String(' ', Math.Max(40 - ((string)dr[0]).Length, 3))}{dr[1]}{new String(' ', Math.Max(30 - ((string)dr[1]).Length, 3))}{dr[2]}");
Db.BeginTransaction("MySqlSrvA");
int i = (int)Db.ExecNonQry("MySqlSrvA", 0, "update Skillango.User set Title='Cyber Security Specialist' where Name='Alain Trépanier';", 0);
Db.CommitTransaction("MySqlSrvA");
long count = (long)Db.ExecScalar("MySqlSrvA", 0, "select count(*) from Skillango.User where Name like @NameMask;", 0, "@NameMask", "a%");
tbl = Db.ToTbl("MySqlSrvA", 0, $"insert into Skillango.log (Type,Host,ApplicationUser,Application,Process,Message) values ('Warning','{Environment.MachineName} ({Environment.OSVersion})','{Environment.UserName}','Test','TestMySql','Msg6'), ('Message','{Environment.MachineName} ({Environment.OSVersion})','{Environment.UserName}','Test','TestMySql',@msg7); select ROW_COUNT(), LAST_INSERT_ID() as FirstAutoInc;", EFillOption.Data, 0, 0, "@msg7", "Message 7");
Console.WriteLine($"\n{i};{Db.ServerAndDbName("MySqlSrvA")};count={count}; RowCount: {tbl.Rows[0][0]}; FirstAutoInc: {tbl.Rows[0]["FirstAutoInc"]}");
}