CA1306: указывайте языковой стандарт для типов данных

Товар Значение
Идентификатор правила CA1306
Категория Microsoft.Globalization
Критическое изменение Не критическое

Причина

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

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

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

Устранение нарушений

Чтобы устранить нарушение этого правила, явно задайте языковой стандарт для 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;
        }
    }
}

См. также