Partager via


CA1306 : Définir les paramètres régionaux pour les types de données

TypeName

SetLocaleForDataTypes

CheckId

CA1306

Catégorie

Microsoft.Globalization

Modification avec rupture

Modification sans rupture

Cause

Une méthode ou constructeur a créé une ou plusieurs instances de System.Data.DataTable ou System.Data.DataSet et n'a pas défini explicitement la propriété de paramètres régionaux (DataTable.Locale ou DataSet.Locale).

Description de la règle

Les paramètres régionaux déterminent des éléments de présentation des données spécifiques à la culture, telles que la mise en forme utilisée pour les valeurs numériques, les symboles monétaires et l'ordre de tri.Lorsque vous créez un DataTable ou un DataSet, vous devez définir les paramètres régionaux explicitement.Par défaut, les paramètres régionaux de ces types sont la culture actuelle.Pour les données stockées dans une base de données ou un fichier et partagées globalement, les paramètres régionaux devraient normalement avoir pour valeur la culture indifférente (CultureInfo.InvariantCulture).Lorsque les données sont partagées à l'échelle des différentes cultures, le recours à des paramètres régionaux par défaut peut entraîner une présentation ou une interprétation incorrecte des contenus du DataTable ou du DataSet.

Comment corriger les violations

Pour corriger une violation de cette règle, définissez explicitement les paramètres régionaux (via la propriété locale) pour le DataTable ou le DataSet.

Quand supprimer les avertissements

Il est possible de supprimer sans risque un avertissement de cette règle lorsque la bibliothèque ou l'application est destinée à une audience locale limitée, lorsque les données ne sont pas partagées, ou lorsque le paramétrage par défaut débouche sur le comportement désiré dans tous les scénarios pris en charge.

Exemple

L'exemple suivant crée deux instances de DataTable.

using System;
using System.Data;
using System.Globalization;

namespace GlobalLibrary
{
    public class MakeDataTables
    {
        // Violates rule: SetLocaleForDataTypes.
        public DataTable MakeBadTable()
        {
            DataTable badTable = new DataTable("Customers");
            DataColumn keyColumn = badTable.Columns.Add("ID", typeof(Int32));
            keyColumn.AllowDBNull = false;
            keyColumn.Unique = true;
            badTable.Columns.Add("LastName", typeof(String));
            badTable.Columns.Add("FirstName", typeof(String));
            return badTable;
        }

        public DataTable MakeGoodTable()
        {
            DataTable goodTable = new DataTable("Customers");
            // Satisfies rule: SetLocaleForDataTypes.
            goodTable.Locale = CultureInfo.InvariantCulture;
            DataColumn keyColumn = goodTable.Columns.Add("ID", typeof(Int32));

            keyColumn.AllowDBNull = false;
            keyColumn.Unique = true;
            goodTable.Columns.Add("LastName", typeof(String));
            goodTable.Columns.Add("FirstName", typeof(String));
            return goodTable;
        }
    }
}

Voir aussi

Référence

System.Data.DataTable

System.Data.DataSet

System.Globalization.CultureInfo

CultureInfo.CurrentUICulture

CultureInfo.InvariantCulture