1

SQL Server 2005. Visual Studio 2010. ASP.NET 2.0 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 Management Studio 中检查了这一点。但是当我读出来时,我得到了“2012-11-22 오후 4:14:37”!那个韩语“오후”是从哪里来的???是因为任何地方的文化背景吗?但我看不到在我的代码或 SQL Server 中的位置。这给我带来了问题,因为当我修改这条记录时,它会尝试将“2012-11-22 오후 4:14:37”写入db,这当然是SQL server报错。

我的原始代码:

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?
...
}
4

1 回答 1

0

一个常见的误解是您可以“检查”数据库中日期时间字段的格式。您在屏幕上看到的格式将始终取决于客户端,即使客户端是“SQL Server Management Studio”。在数据库中,日期时间以很少需要知道的二进制格式存储。

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

您的示例没有显示 reservation["rsvDate"] 会发生什么,用韩语字符显示的值在哪里?您如何尝试将带有韩文字符的值写入数据库?

为避免使用韩语字符,您可以在使用 Date 值的地方使用 .ToString(CultureInfo.InvariantCulture)。

于 2014-04-06T16:08:24.643 回答