Accéder aux ressources depuis le code behind


 5/27/2015

label.Text = Resources.NomDuFichier.NomDeLaRessource;

Lire >>

Affichage d'une date dans une GridView avec un format défini dans un BoundField


 5/27/2015

Il suffit d'utiliser la propriété DataFormatString dans le BoundField avec le format désiré.

<asp:BoundField DataField="LaDate"

DataFormatString="{0:dd/MM/yyyy}"

HeaderText="LaDate" 

SortExpression="LaDate" />

Lire >>

Accéder aux ressources depuis un fichier ASPX


 5/27/2015

Text="<%$ Resources : « Nom du fichier », « Nom de la ressource » %>"

Lire >>

Transformer un fichier CSV en XML


 5/27/2015

public class ConvertCSVToXML
{
// conversion du fichier CSV téléchargé en fichier xml
private const string _root = "Articles";
private const string _node = "Article";
private const char _separator = ';';
 
public static DataSet convert(string pathSource, string pathDestination)
{
        // remplacement du caractère " " par rien ("")
        StreamReader stream = null;
        string[] saEntetes = null;
        string sLigne = string.Empty;
 
        // Initialisation des DataSet et DataTable
        DataSet csvDataSet = null;
        DataTable csvDataTable = null;
        try
          {
            csvDataSet = new DataSet(_root);
            csvDataTable = new DataTable(_node);
 
            // Lecture du fichier CSV ligne par ligne
            stream = new StreamReader(pathSource);
            sLigne = stream.ReadLine();
 
            // En tenant compte du séparateur
            saEntetes = sLigne.Split(_separator);
 
            for (int i = 0; i < saEntetes.Length; i++)
            {
                // formatage des éléments du fichier XML
                csvDataTable.Columns.Add(saEntetes[i].ToString());
            }
            int ii = 0;
 
            while (sLigne != null)
            {
                if (ii != 0)
             
...

Lire >>

Utiliser les fuseaux horaires (TimeZone) avec ASP.NET


 5/27/2015

Je travaille actuellement dans une entreprise londonienne, Vestibule-solutions : http://www.vestibule-solutions.com/.

Afin de pouvoir commercialiser ses produits à l'international, la gestion des fuseaux horaires devenait une urgence. Les serveurs sont situés au Royaume Unis, donc si l'on utilise par exemple la fonction DateTime.Now pour un client en Chine, la date retournée sera la date du serveur. Ce qui peut etre étrange pour le client.

Pour moi, le meilleur moyen d'utiliser la gestion des fuseaux horaires est :

  • d'ajouter une classe qui implémentera les méthodes de la classe TimeZoneInfo (Qui a été ajoutée dans le framework 4). Il est préférable d'ajouter une classe pour la flexibilité. Si vous voulez implémenter ou modifier le moyen d'utiliser les fuseaux horaires, seulement cette classe aura besoin d'etre modifiée. 
  • De stocker les dates et heures en base de données au format du serveur. Beaucoup plus simple pour la maintenance. Et si un client venait a changer de pays, il suffit de changer seulement une valeur dans le fichier de configuration.
  • Et bien sur d'afficher toutes les dates sur l'interface utilisateur au format "Local". Toutes les manipulation des dates internes au programme doivent rester au format serveur. 

1- Créer la classe MyDateTime

//-----------------------------------------------------------------------
// <copyright file="MyDateTime.cs" company="Vestibule Solutions">
//     Copyright (c) Vestibule Solutions. All rights reserved.
// </copyright>
// <author>Pierre-Henri Nogues</author>
// <date>17/01/2012</date>
//-----------------------------------------------------------------------
 
namespace Exact.Hospitality.Core.Utility
{
    #region IMPORTS
 
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Text;
    using Exact.Hospitality.Core.BusinessLogic;
 
    #endregion
 
    ///<summary>
    /// Class MyDateTime to use the TimeZone functions
    ///</summary>
    public class MyDateTime
    {
        #region Properties
 
        ///<summary>
        /// Gets the time zone name of the customer
        ///</summary>
        public static string TimeZoneName
        {
            get
            {
                string timeZone = ConfigurationManager.AppSettings[Constants.AppConfig.TIMEZONE];
 
                if (string.IsNullOrEmpty(timeZone))
                {
                    timeZone = TimeZoneInfo.Local.Id;
                }
 
                return timeZone;
            }
        }
 
        #endregion
 
        #region NOW
 
        ///<summary>
        /// Gets the dateNow of the customer timeZone
        ///</summary>
        public static DateTime Now
        {
            get
            {
                return ConvertToTimeZone(DateTime.Now);
            }
        }
 
        #endregion
 
        #region ConvertTo
 
        ///<summary>
        /// Convert the dateTime to the timeZone dateTime
        ///</summary>
        ///<param name="dt">The dateTime to convert</param>
        ///<returns>Return the dateTime of the time zone</returns>
        public static DateTime ConvertToTimeZone(DateTime dt)
        {
            return TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dt, TimeZoneName);
        }
 
        ///<summary>
        /// Convert the dateTime to the timeZone dateTime
        ///</summary>
        ///<param name="dateString">The dateTime to convert</param>
        ///<returns>Return the dateTime of the time zone</returns>
        public static string ConvertToTimeZone(string dateString)
        {
            try
            {
                if (!string.IsNullOrEmpty(dateString))
                {
                    return TimeZoneInfo.ConvertTimeBySystemTimeZoneId(Convert.ToDateTime(dateString), TimeZoneName).ToString();
                }
                else
                {
                    return string.Empty;
                }
            }
            catch (FormatException fEx)
            {
                // Your logger here ** (Log4Net for example)
 
                return string.Empty;
            }
        }
 
        ///<summary>
        /// Convert the dateTime to the local time
        ///</summary>
        ///<param name="dt">The dateTime to convert</param>
        ///<returns>The local time of this time zone dateTime</returns>
        public static DateTime ConvertToLocal(DateTime dt)
        {
            return TimeZoneInfo.ConvertTime(dt, TimeZoneInfo.FindSystemTimeZoneById(TimeZoneName), TimeZoneInfo.Local);
        }
 
        ///<summary>
        /// Convert a date string to the datetime local time
        ///</summary>
        ///<param name="dateTimeString">The dateTime string to convert</param>
        ///<returns>The local time of this time zone dateTime</returns>
        public static DateTime ConvertToLocal(string dateTimeString)
        {
             return TimeZoneInfo.ConvertTime(Convert.ToDateTime(dateTimeString), TimeZoneInfo.FindSystemTimeZoneById(TimeZoneName), TimeZoneInfo.Local);
        }

        #endregion
 
        #region GetTimeZones
 
        ///<summary>
        /// Get all the time zones
        ///</summary>
        ///<returns>The time zone list</returns>
        public static IList<TimeZoneInfo> GetTimeZones()
        {
            return TimeZoneInfo.GetSystemTimeZones();
        }
 
        #endregion
    }
}

2 - Comment utiliser cette classe :

Du serveur au navigateur :

Utiliser "Now" comme avant mais non plus avec "DateTime.Now" mais "MyDateTime.Now"

Exemple :

txtDate.Text = MyDateTime.Now.ToShortDateString();
Du navigateur au serveur (ou base de données) :

Au lieu d'utiliser "Convert.ToDatetime", utiliser "MyDateTime.ConvertToLocale"

Exemple :

DateTime theDate = MyDateTime.ConvertToLocale(txtDate.Text);

3 - Ajouter la constante dans votre fichier Constants.cs (Ou le creer si vous ne l'utiliser pas)

public class Constants
{
///<summary>
/// Constants for the key of the app.config file
///</summary>
public class AppConfig
{
public const string TIMEZONE = "TimeZone";
}
}

4 - Utiliser app.config pour stocker l'identifiant de la "TimeZone"

<?xmlversion="1.0"encoding="utf-8" ?>
<appSettings>
    <addkey="TimeZone"value="Kamchatka Standard Time" />
</appSettings>

 

Il s'agit d'un exemple avec un client web qui

  • liste tous les fuseaux horaires
  • Change le fuseaux horaire de l'application
  • Affiche l'heure avec le fuseau utilisé
  • Read et Write dans le fichier app.config, l'identifiant de la TimeZone a utiliser

N'hésitez à laisse vos commentaires pour discuter de cette article.

Lire >>

Vérifier si l'élément existe déjà avant création de trigger-tables-insertion dans SQL serveur


 5/27/2015

- Trigger

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

IF EXISTS (SELECT * FROM sys.objects WHERE [type] = 'TR' AND [name] = 'MyTrigger' )

    DROP TRIGGER  MyTrigger;

GO

-- =============================================

-- Author:<Author,,Name>

-- Create date: <Create Date,,>

-- Description:<Description,,>

-- =============================================

CREATE TRIGGER [ MyTrigger ]

   ON ...

- Table

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE name = 'MyTable')

CREATE TABLE [dbo].[ MyTable ](....

- Insertion de données

IF NOT EXISTS (SELECT id FROM [MyTable] WHERE [Name] = 'toto')

INSERT INTO [ MyTable ]

           ([Name]

           ,[Code])

     VALUES

           ('toto'

           ,'007')

- View

IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS  WHERE TABLE_NAME = 'MyView')

    DROP VIEW MyView

GO

 

CREATE VIEW MyView

AS 

     ....

GO

Lire >>

Trier une liste en c# (avec delegate et sort)


 5/27/2015

List<TheType> theList = new List<TheType>();
theList.Sort(delegate(TheType t1, TheType t2)
{  return t1.PropertyToOrder.CompareTo(t2.PropertyToOrder);
});

Lire >>

Changer la connection string d'une autre application avec XML


 5/27/2015

Comment changer la conenction string d'une autre application avec XML.

A utiliser SEULEMENT pour ce cas, sinon utiliser les méthodes habituelles avec configuration manager.

 

private bool ChangeConnectionString(string connStringName, string newValue, string path)
{
try
{
//CreateXDocument and load configuration file
XDocument doc = XDocument.Load(path + "/web.config");
//Find all connection strings
var query1 = from p in doc.Descendants("connectionStrings").Descendants()
                             select p;
 
//Go throught each connection string elements find atribute specified by argument and replace its value with newVAlue
foreach (var child in query1)
{
foreach (var atr in child.Attributes())
{
if (atr.Name.LocalName == "name" && atr.Value == connStringName)
 
 if (atr.NextAttribute != null && atr.NextAttribute.Name == "connectionString")
 
atr.NextAttribute.Value = newValue;
}
}

doc.Save(path + "/web.config");
return true;
}
catch (Exception ex)
{
lblError.Text += "Error to change the web.config with this value " + newValue + " and this path " + path + "<br/> " + ex.Message;
return false;
       }
}

Lire >>