2012-11-24 4 views
1

SQL 서버 2005 비주얼 스튜디오 2010 ASP.NET 2.0 웹 응용 프로그램SQL Server 날짜 문화 (현지화) 두통

이 여러 언어를 지원하는 웹 응용 프로그램은, 그들 중 하나는 한국어입니다. langid = 3 인 경우 다른 언어를 구별하기 위해 쿼리 문자열에 "langid"가 있습니다. 한국어입니다.

"select * from Reservations where rsv_id = 1234" 

형 날짜에, 예약 날짜입니다 테이블에서 "rsv_date"라는 이름의 열이 있습니다 : 'C# 코드 뒤에 내 코드에서

, 나는이 쿼리를 사용하여 테이블을 참조하십시오. db 테이블에서 값은 "11/22/2012 4:14:37 PM"입니다. 나는 이것을 SQL 서버 관리 스튜디오에서 확인했다. 그러나 내가 그것을 읽을 때, 나는 "2012-11-22 오후 4:14:37"을 얻었다! 그 한국인 "오후"는 어디에서 왔습니까? 어느 문화 설정으로 인해 그곳에 있습니까? 하지만 내 코드 나 SQL Server에서 어느 부분이 보이지 않습니다. 이것은이 레코드를 수정할 때 db에 "2012-11-22 pm 4:14:37"을 쓰려고 시도하기 때문에 문제를 일으켰습니다. 물론 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? 
... 
} 
+0

아무도 도와 줄 수 없나요? – martial

답변

0

그것은 당신이 데이터베이스에 날짜 필드의 형식을 "확인"할 수있는 일반적인 오해입니다. 화면에 표시되는 형식은 클라이언트가 "SQL 서버 관리 스튜디오"인 경우에도 항상 클라이언트에 따라 다릅니다. 데이터베이스에서 datetime은 거의 알아야 할 필요가없는 바이너리 형식으로 저장됩니다.

그래서 한국어 문자는 클라이언트에서 왔으며이 경우 사용자 자신의 프로그램입니다. 예, 그들은 어딘가의 문화 설정에 달려 있습니다.

예를 들어 예약 [ "rsvDate"]에 어떤 일이 발생하는지 표시하지 않습니다. 여기서 한국어 문자와 함께 표시되는 값은 무엇입니까? 한국어 문자가있는 값을 데이터베이스에 어떻게 쓰려고합니까?

한국어 문자를 피하려면 Date 값을 사용하는 .ToString (CultureInfo.InvariantCulture)을 사용할 수 있습니다.