Указывайте язык для типов данных
Обновлен: Ноябрь 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;
}
}
}