2010-02-12 2 views
1

문제가 있습니다.SQL Server 및 C# 코드의 Dateformat이 일치하지 않습니다.

SQL Server 2005가 백엔드 인 C#의 응용 프로그램이 있습니다.

문제는 날짜를 기준으로 올바른 레코드를 가져 오는 중입니다.

프론트 엔드 코드는 내가 쿼리 분석기에서 usp_NewGetUserDetail '03/04/2010'를 실행하면, 내가 올바른 기록을 얻을 수 있어요 이제

if (string.IsNullOrEmpty(txtFromDate.Text)) 
    SelectCmd.Parameters[0].Value = DBNull.Value; 
else 
    SelectCmd.Parameters[0].Value = txtFromDate.Text; 

입니다.

그래서 나는 내 SP가 정확하다는 확신이있다. (나는 많은 변형을 테스트했다.)

프런트 엔드 코드 (SelectCmd.Parameters[0].Value = "03/04/2010";)에서 동일한 값이 전달 된 경우 예기치 않은 레코드가 발생합니다. 그 말은 날짜 범위에없는 레코드를 의미합니다.

백엔드 및 프론트 엔드의 날짜 형식에 약간의 불일치가있는 것으로 생각됩니다.

친절하게 내가이

도와주세요 해결하기 위해 제공해야하는 몇 가지 정보를 놓친 경우 알려주세요.

답변

1

SQL 서버에서 날짜 다루기가 까다로운 사업이다. Adam은 이미 언급했듯이 날짜를 문자열로 다루지 않도록해야합니다. 더러워지며 DateTime (.NET과 T-SQL 모두 사용)이 훨씬 안전하고 쉽습니다.

문자열을 사용해야하는 경우 이러한 점에 유의해야합니다. 2010 년 2 월 5 일과 같은 날짜는 2010 년 2 월 5 일 일부 장소에서 해석되거나 2010 년 5 월 2 일로 해석 될 것입니다. 당신이하는 일이 무엇이든지간에, 당신은 항상 다른 설정을 가지고 다른 결과를 얻는 사람을 만날 것입니다.

여기서 할 일은 모든 로케일 및 언어 설정과 독립적이며 항상 작동하는 ISO-8601 format을 사용하는 것입니다. 날짜에 대한

그래서, 항상 는 YYYYMMDD 형식을 사용 - 우선, 그것은 항상 작동하고, 모든 초, 해당 형식으로, 당신은 "자연"정렬 동작을 얻을 - 월 다음 년도로 정렬을, 그 다음 날.

0

날짜를 문자열로 전달할 필요가 없으며 이어야이되어야합니다. 매개 변수의 값을 문자열 표시가 아닌 원하는 날짜를 나타내는 DateTime 개체로 설정하십시오. 이 같은

+0

if (string.IsNullOrEmpty (txtFromDate.Text))와 같은 조언을 시도했습니다. SelectCmd.Parameters [0] .Value = DBNull.Value; else SelectCmd.Parameters [0] .Value = Convert.ToDateTime (txtFromDate.Text); 그러나 같은 결과와 –

0

시도 뭔가 : 대부분의 형식은 language- 및 로케일에 의존하기 때문에

DateTime fromDate; 
if (DateTime.TryParse(txtFromDate.Text, out fromDate)) 
{ 
    SelectCmd.Parameters[0].Value = fromDate 
} 
else 
{ 
    SelectCmd.Parameters[0].Value = DBNull.Value; 
}