Поделиться через


Указывайте язык для типов данных

Обновлен: Ноябрь 2007

TypeName

SetLocaleForDataTypes

CheckId

CA1306

Категория

Microsoft.Globalization

Критическое изменение

Не критическое

Причина

Метод или конструктор создал один или несколько экземпляров System.Data.DataTable или System.Data.DataSet и не установил явным образом свойство языка (DataTable.Locale или DataSet.Locale).

Описание правила

Язык и региональные параметры определяют представление элементов данных, таких как формат чисел, обозначение денежных единиц и порядок сортировки. При создании DataTable илиDataSet следует указывать язык явным образом. По умолчанию для этих типов используются текущие языковые и региональные параметры. Для общедоступных данных, хранящихся в базе данных или в файле, обычно следует указывать инвариантные языковые параметры (CultureInfo.InvariantCulture). При общем доступе к данным из систем с различными языковыми параметрами применение языковых параметров по умолчанию может привести к тому, что содержимое DataTable или DataSet будет неправильно отображено или обработано.

Предотвращение нарушений

Чтобы исправить нарушение этого правило, следует явным образом указать языковые параметры для DataTable и DataSet.

Отключение предупреждений

Можно безопасно отключать предупреждения этого правила, если библиотека или приложение предназначены для ограниченного круга локальных пользователей, общий доступ к данным не предоставляется, или применение параметров по умолчанию допустимо для всех поддерживаемых сценариев.

Пример

В следующем примере демонстрируется создание двух экземпляров 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;
        }
    }
}

См. также

Ссылки

System.Data.DataTable

System.Data.DataSet

System.Globalization.CultureInfo

CultureInfo.CurrentUICulture

CultureInfo.InvariantCulture