C# .net SqlDataReader方法是否具有区域性不变性

C# .net SqlDataReader方法是否具有区域性不变性,c#,.net,sql-server,currentculture,invariantculture,C#,.net,Sql Server,Currentculture,Invariantculture,例如,如果我的小数存储在具有不同区域性设置的数据库中,并且我希望通过SqlDataReader将它们输入到我的程序中,我真的找不到确切的答案。只要SQL-DB中的数据类型设置为decimal,是否始终正确解析“,”和“.”并将其转换为我的当前区域性 如果它们存储在varchar中并尝试使用.GetDecimal(),会发生什么 .net SqlDataReader方法是否具有区域性不变性 SqlDataReader不使用任何CultureInfo或类似的东西。它不了解文化 当您的值以十进制形式存

例如,如果我的小数存储在具有不同区域性设置的数据库中,并且我希望通过SqlDataReader将它们输入到我的程序中,我真的找不到确切的答案。只要SQL-DB中的数据类型设置为decimal,是否始终正确解析“,”和“.”并将其转换为我的当前区域性


如果它们存储在varchar中并尝试使用.GetDecimal(),会发生什么

.net SqlDataReader方法是否具有区域性不变性

SqlDataReader
不使用任何
CultureInfo
或类似的东西。它不了解文化

当您的值以十进制形式存储在数据库中时,SqlDataReader将接收该十进制值。它们(字符串-)在应用程序中的表示方式取决于您的操作方式:只需使用
dataReader[“myColumn”]。ToString()
将使用当前的
CultureInfo
。如果你想要一种不同的文化,你必须明确地提供它


如果它们存储在varchar中并尝试使用.GetDecimal(),会发生什么

当它们存储为字符串时,您会遇到问题(至少如果您不知道创建这些字符串时使用的文化)。您必须使用正确的
CultureInfo
首先解析这些字符串以获得正确的值。但无论如何,为什么要将数字作为字符串存储在数据库中呢

.net SqlDataReader方法是否具有区域性不变性

SqlDataReader
不使用任何
CultureInfo
或类似的东西。它不了解文化

当您的值以十进制形式存储在数据库中时,SqlDataReader将接收该十进制值。它们(字符串-)在应用程序中的表示方式取决于您的操作方式:只需使用
dataReader[“myColumn”]。ToString()
将使用当前的
CultureInfo
。如果你想要一种不同的文化,你必须明确地提供它


如果它们存储在varchar中并尝试使用.GetDecimal(),会发生什么


当它们存储为字符串时,您会遇到问题(至少如果您不知道创建这些字符串时使用的文化)。您必须使用正确的
CultureInfo
首先解析这些字符串以获得正确的值。但是,无论如何,为什么要将数字存储为数据库中的字符串呢?

如果它们存储在varchar中并尝试使用.GetDecimal(),会发生什么情况?
当您尝试使用它时会发生什么情况?“如果它们存储在varchar中并尝试使用.GetDecimal(),会发生什么情况?”您收到一个大的异常,表示您的列没有预期的类型,就是这样
SqlDataReader
不执行任何数据类型之间的转换。即使(比如)用
GetInt64
读取
INT
值也会失败,即使所有
INT
值都可以用
Int64
表示。不幸的是,
string
varchar
等)是很容易处理的类型,因为“一切都可以被视为字符串”;不幸的是,它们通常是最不适合使用的类型。
如果它们存储在varchar中并尝试使用.GetDecimal(),会发生什么?
当您尝试使用它时会发生什么?“如果它们存储在varchar中并尝试使用.GetDecimal(),会发生什么?”你会得到一个大的异常,说你的列没有预期的类型,就是这样
SqlDataReader
不执行任何数据类型之间的转换。即使(比如)用
GetInt64
读取
INT
值也会失败,即使所有
INT
值都可以用
Int64
表示。不幸的是,
string
varchar
等)是很容易处理的类型,因为“一切都可以被视为字符串”;不幸的是,它们通常是最不适合使用的类型。