CA1306:設定資料類型的地區設定
型別名稱 |
SetLocaleForDataTypes |
CheckId |
CA1306 |
分類 |
Microsoft.Globalization |
中斷變更 |
中斷 |
原因
方法或建構函式 (Constructor) 建立了一或多個 DataTable 或 DataSet 執行個體,而且並未明確設定地區設定 (Locale) 屬性 (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;
}
}
}