30.10.20

Entity Framework SQL Select dynamic

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.Entity;
using System.Dynamic;
using System.Linq;

namespace ConsoleApp1
{
    public class Program
    {
        static void Main(string[] args)
        {
            FactureEntities fe = new FactureEntities();
            List<dynamic> results = SQLHelpers.DynamicListFromSql(fe, "select a.nom as a_nom, a.prix as a_prix, c.nom as c_nom from article a inner join categorie c on a.categorieid = c.id where a.id > @xxx", new Dictionary<string, object> { { "xxx", 0 } }).ToList();
            foreach (var r in results)
            {
                Console.WriteLine($"{r.a_nom} - {r.a_prix} - {r.c_nom}");
            }
            Console.ReadLine();
        }
    }

    public static class SQLHelpers
    {
        public static IEnumerable<dynamic> DynamicListFromSql(this DbContext db, string Sql, Dictionary<string, object> Params = null)
        {
            using (var cmd = db.Database.GetDbConnection().CreateCommand())
            {
                cmd.CommandTimeout = 300;
                cmd.CommandText = Sql;
                if (cmd.Connection.State != ConnectionState.Open) { cmd.Connection.Open(); }

                if (Params != null)
                {
                    foreach (KeyValuePair<string, object> p in Params)
                    {
                        DbParameter dbParameter = cmd.CreateParameter();
                        dbParameter.ParameterName = p.Key;
                        dbParameter.Value = p.Value;
                        cmd.Parameters.Add(dbParameter);
                    }
                }

                using (var dataReader = cmd.ExecuteReader())
                {
                    List<string> listNameFields = null; 
                    while (dataReader.Read())
                    {
                        listNameFields = new List<string>();
                        var row = new ExpandoObject() as IDictionary<string, object>;
                        for (var fieldCount = 0; fieldCount < dataReader.FieldCount; fieldCount++)
                        {
                            int i = 1;
                            string fieldName = dataReader.GetName(fieldCount);
                            //pour éviter l'erreur de plusieurs noms de champs avec le même nom (duplicate key field)
                            if (listNameFields.Any(l => l == dataReader.GetName(fieldCount)))
                            {
                                fieldName += i++;
                            }
                            listNameFields.Add(fieldName);
                            row.Add(fieldName, dataReader[fieldCount]);
                        }
                        yield return row;
                    }
                }
            }
        }
    }
}

16.10.20

GitHub et NuGet dans Visual Studio

//GitHub (https://www.c-sharpcorner.com/article/how-to-connect-visual-studio-project-to-github/)
- se connecter sur github.com
- créer un nouveau repository (WpfHelpers)
- cocher public, Add a readme file, add .gitignore, choose a licence
- dans visual studio créer une nouvelle solution avec un projet (Class Library (.NET Framework)) dans ce répertoire
- (dans les propriétés du projet, ajouter les "Assembly Information")
- fichier "ajouter au controle de code source"
- aller dans "Team Explorer" (onglet à droite)
- double clic sur le projet dans git locaux
- cliquer sur "Sync"
- cliquer sur "Publish to GitHub"
- remplir les infos et cliquer sur "Publish"
- se connecter à github et contrôler que les fichies soient bien présents10:06 16.10.2020
- depuis visual studio dans "Solution Explorer" on peut voir les modifications faites, faire un commit, puis un "Pull" depuis le "Team Explorer"

//NuGet (https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package-using-visual-studio-net-framework)
!!!A TESTER AVEC LA COMMANDE dotnet pack
- aller sur nuget.org et télécharger nuget.exe et le mettre dans le dossier du projet
- dans visual studio, mettre le projet en "Release"
- dans une cmd lancer la commande "nuget spec nom_du_projet.csproj", cela créé le fichier nom_du_projet.nuspec
- remplir le fichier avec les bonnes valeurs (id, version, authors, description) et supprimer éventuellement (projecturl et iconurl) ou ce qui apparait comme avertissement dans la commande suivante

<?xml version="1.0" encoding="utf-8"?>
<package>
  <metadata>
    <id>DelphivesHelpers</id>
    <version>1.1</version>
    <title>WPF Utilities</title>
    <authors>Delphives</authors>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <license type="expression">MIT</license>
    <description>utilities for WPF</description>
    <releaseNotes>Add RelayCommand</releaseNotes>
    <copyright></copyright>
    <tags></tags>
<dependencies>
      <group targetFramework=".NETFramework4.5" />
    </dependencies>
  </metadata>
  <files>
    <file src="bin\Release\*.*" target="lib/net45" />
  </files>
</package>

- ajouter les balises dans le fichier :

    <dependencies>
      <group targetFramework=".NETFramework4.5" />
    </dependencies>
  </metadata>
  <files>
    <file src="bin\Release\*.*" target="lib/net45" />
  </files>
</package>

- lancer la commande "nuget pack nom_du_projet.nuspec" et un fichier "$id$.1.0.0.nupkg" est créé
- aller sur nuget.org et se connecter
- aller dans le menu upload et charger le fichier .nupkg créé précédemment
- par défaut le package est en attente de publication, ensuit on reçoit un email qui nous confirme la publication
- recherche le package depuis nuget manager
//GitHub récupérer un projet existant
fichier, "cloner le dépôt"
- parcourir un dépôt en se connectant à GitHub
- sélectionner le répertoire, le chemin et appuyer sur "Clone"




//optionnel - installer l'extension "GitHub Extension for Visual Studio"

6.10.20

Fond transparent avec Gimp

- ouvrir l'image dans gimp
- dans le menu calque - transparence - ajouter un canal alpha
- dans le menu sélection - par couleur
- dans le menu édition - effacer
- sauvegarder