SQL Server日期时间文化(本地化)头痛

时间:2012-11-24 00:54:23

标签: sql datetime localization culture

SQL Server 2005. Visual Studio 2010. ASP.NET 2.0 Web应用程序

这是一个支持多种语言的Web应用程序,其中一种是韩语。我在查询字符串中有“langid”来区分不同的语言,如果langid = 3则是韩语。

在我的代码“C#代码后面,我使用此查询读取了一个表:

"select * from Reservations where rsv_id = 1234"

表格中有一个名为“rsv_date”的列,它是datetime类型的预订日期。在db表中,其值为“11/22/2012 4:14:37 PM”。我在SQL Server管理工作室检查过这个。但是当我读出来的时候,我得到了“2012-11-22오후4:14:37”!朝鲜语“오후”来自哪里???是因为某种文化背景吗?但我在我的代码或SQL Server中都没有看到。这给我带来了问题,因为当我修改这条记录时,它会尝试将“2012-11-22오후4:14:37”写入数据库,这当然是SQL服务器报告错误。

我的原始代码:

Hashtable reservation = new Hashtable();
SqlCommand sqlCommand = null;
SqlDataReader dataReader;
string queryCommand = "select * from Reservations where rsv_id = @RsvID";
sqlCommand = new SqlCommand(queryCommand, getConnection());
sqlCommand.Connection.Open();
sqlCommand.Parameters.AddWithValue("@RsvID", rsvID);
dataReader = sqlCommand.ExecuteReader();
while (dataReader.Read())
{
reservation["rsvID"] = dataReader["rsv_id"];
reservation["rsvCode"] = dataReader["rsv_code"];
reservation["rsvType"] = dataReader["rsv_type"];
reservation["rsvDate"] = dataReader["rsv_date"]; // where does Korean come from?
...
}

1 个答案:

答案 0 :(得分:0)

您可以检查"这是一个常见的误解。数据库中datetime字段的格式。 您在屏幕上看到的格式将始终取决于客户端,即使客户端是" SQL服务器管理工​​作室"。 在数据库中,日期时间以二进制格式存储,很少需要知道。

因此,韩文字符来自客户端,在这种情况下是您自己的程序。 是的,他们将取决于某处的文化背景。

您的示例并未显示预订会发生什么[" rsvDate"],其中显示的是韩文字符的值? 您是如何尝试将包含韩文字符的值写入数据库?

要避免使用韩文字符,可以使用.ToString(CultureInfo.InvariantCulture)使用日期值。