1

SQL Server 2005. Visual Studio 2010. ASP.NET 2.0 Web アプリケーション

これは、複数の言語をサポートする Web アプリケーションです。そのうちの 1 つは韓国語です。言語を区別するためにクエリ文字列に「langid」を使用しています。langid=3 の場合は韓国語です。

コード ビハインドの C# コードでは、次のクエリを使用してテーブルを読み取ります。

"select * from Reservations where rsv_id = 1234"

テーブルに "rsv_date" という名前の列があり、これは日時型の予約日です。db テーブルでは、その値は「11/22/2012 4:14:37 PM」です。これをSQLサーバー管理スタジオで確認しました。でも読んでみると「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?
...
}
4

1 に答える 1

0

データベースの日時フィールドの形式を「チェック」できるというのはよくある誤解です。クライアントが「SQL Server Management Studio」であっても、画面に表示される形式は常にクライアントによって異なります。データベースでは、日時はバイナリ形式で格納されているため、知る必要はほとんどありません。

したがって、韓国語の文字はクライアント (この場合は独自のプログラム) からのものです。はい、どこかの文化設定に依存します。

あなたの例は、reservation["rsvDate"] に何が起こるかを示していません。韓国語の文字で表示される値はどこですか? どのように韓国語の文字で値をデータベースに書き込もうとしていますか?

韓国語の文字を避けるには、 Date 値を使用する場所で .ToString(CultureInfo.InvariantCulture) を使用できます。

于 2014-04-06T16:08:24.643 に答える