17 avril 2014

C# : Requête SQL qui remonte du XML

Si vous voulez pouvoir utiliser le générateur de XML de SQL Server directement en C#, je vous propose cette petite procédure qui permet exécuter le SQL et de retourner directement un XElement.

    public XElement ExecuteRequeteGetXml(string sql, params SqlParameter[] commandParameters)
    {
      StringBuilder res = new StringBuilder();
      SqlCommand cmd = this.GetSqlCommand(CommandType.Text, sql, commandParameters);
      using (XmlReader xmlr  = cmd.ExecuteXmlReader())
      {
        xmlr.Read();
        while (xmlr.ReadState != System.Xml.ReadState.EndOfFile)
        {
          res.Append(xmlr.ReadOuterXml());
        }
      }

      if (res.Length > 0)
      {
        return XElement.Parse(res.ToString());
      }
      else
      {
        return null;
      }
    }

On récupère le reader, puis on lit jusqu’à la fin du flux XML et on recopie l'info dans un StringBuilder qui est parsé en XElement à la fin.
Utile aussi la procédure GetSqlCommand : Qui suppose que la chaîne de connexion est dans le fichier de configuration avec la clé "Base".

    private SqlCommand GetSqlCommand(CommandType typeCommande, string requeteSql, params SqlParameter[] commandParameters)
    {
      SqlCommand command = new SqlCommand();
      string connexionString = ConfigurationManager.ConnectionStrings["Base"].ConnectionString;
      SqlConnection connexion = new SqlConnection(connexionString);
      connexion.Open();
      command.Connection = connexion;
      command.CommandText = requeteSql;
      command.CommandType = typeCommande;

      if (commandParameters != null)
      { // les paramètres de la commande
        foreach (SqlParameter p in commandParameters)
        {
          if (p != null)
          { // Check for derived output value with no value assigned
            if ((p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input) && p.Value == null)
            {
              p.Value = DBNull.Value;
            }

            command.Parameters.Add(p);
          }
        }
      }

      return command;
    }


08 avril 2014

Redis : Managment Studio publié sur GitHub

Après la librairie, l'application...

https://github.com/slewden/RedisManagementStudio

Reste à faire évoluer pour :
S'adapter aux nouveautés 2.8 (cluster, nouvelles instructions).
Corriger certains petits bugs lorsque les clé expirent notamment
Terminer les points de suivis et mettre en place un moniteur en tâche de fond.


Any suggestions ?

Enjoy


04 avril 2014

Redis: Librairie d'accès à Redis publié dans GitHub

Voila les sources c# du premier jet de ma librairie d'accès au serveur REDIS.

La librairie est développée sur le jeu d'instructions de la version 2.6 du serveur . Les nouveautés des versions ultérieures ne sont donc pas encore disponibles !

Voici le lien
https://github.com/slewden/ClientRedisLib

Chaque méthode a été testée de manière unitaire, mais il reste des points noir (déjà) identifiés au fil des tentatives d'utilisation :

  • Pas de multitâche possible car pas de gestion de pool de connexion (le driver s'emmêle les pinceaux !)
  • La perte de connexion est mal gérée (et donc à revoir !!)

Enjoy