CA1306:设置数据类型的区域设置

类型名

SetLocaleForDataTypes

CheckId

CA1306

类别

Microsoft.Globalization

是否重大更改

非重大更改

原因

某方法或构造函数创建了一个或多个 System.Data.DataTableSystem.Data.DataSet 实例,但未显式设置区域设置属性(DataTable.LocaleDataSet.Locale)。

规则说明

区域设置决定数据的区域性特定显示元素,例如,数值、货币符号和排序顺序所用的格式。 在创建 DataTableDataSet 时,应显式设置区域设置。 默认情况下,这些类型的区域设置为当前区域性。 对于存储在数据库或文件中并且全局共享的数据,通常应将区域设置设置为固定区域性 (CultureInfo.InvariantCulture)。 当数据跨区域性共享时,使用默认区域设置可能导致 DataTableDataSet 的内容无法正确显示或解释。

如何解决冲突

要修复与该规则的冲突,请显式设置 DataTableDataSet 的区域设置。

何时禁止显示警告

当库或应用程序面向有限范围的本地用户、数据不进行共享或者默认设置可以为支持的所有情况生成所需行为时,可以安全地禁止显示此规则发出的警告。

示例

下面的示例创建两个 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