2010-04-15 3 views
3

알고 싶습니다. 열 데이터 유형을 감지하는 좋은 방법이 있습니까 날짜 필드 (DateTime이 아님)?C# Column 데이터 유형 날짜 유형 (DateTime이 아님)

이 내가 현재 무엇을 :

switch (dt.Columns[col].DataType.FullName) 
{ 
    case "System.DateTime": 
     formatedVal = Formatter.GetDateTime(val); 
     break; 

    // which is NOT possible, but something equivalent am looking for 
    case "System.Date": 
     formatedVal = Formatter.GetDate(val); 
     break; 

    default: 
     formatedVal = val.ToString(); 
     break; 
} 
+0

가 어떤 가치 당신이 당신의 날짜 컬럼에 대한 전체 이름 속성에 있어요 찾을 수 있습니까 같은 문제를 해결하기 위해 약간 다른 접근 방식을 사용했다? –

+0

Sam : SQL은 Date (12:00:00)를 반환하고 Date 대신 DateTime이라고 가정하고 싶지 않습니다. –

답변

7

아니. Date 유형이 없으며 단지 DateTime입니다. date 열을 사용하는 SQL Server 2008 테이블에서 가져 오는 경우 .NET의 DateTime에 매핑됩니다.

이 정보를 얻으려면 SQL 수준에서해야합니다. DataTable에로드 될 때까지는 너무 늦었습니다.

나는 당신의 요구 사항에 대한 긍정적 인 아니에요,하지만 당신은 자정을 검사하고 다른 형식 사용하여 멀리 얻을 수있을 것 같습니다 :

DateTime dt = (DateTime)val; 
return (dt == dt.Date) ? Formatter.GetDate(dt) : Formatter.GetDateTime(dt); 
0

SqlDataReader를 사용하는 경우 GetSchemaTable을 호출하면 각 열의 기본 SQL Server 데이터 형식에 액세스 할 수 있습니다. 연결된 MSDN 참조에서 반환하는 스키마 정보의 전체 목록이 있습니다. 따라서 기본 SQL Server 스키마를 실제로 얻어야하는 경우이 방법 중 하나입니다.

SqlDataAdapter에는 FillSchema 메서드가 있지만 실제로 기본 db 형식을 제공한다고 생각하지 않습니다.

0

실제로 "날짜"는 CLR의 기본 제공 데이터 형식이지만 "쓸모없는"것으로 표시되어 있습니다. IDE는 심지어 그것을 보여주지 않습니다 ...

어쨌든, 당신이 객체의 유형을 kwnow하고 싶을 때, 나는 obj.GetType()이라고 생각합니다. 당신이 끝내기 때문에 이름이 최선의 방법이 아닙니다. obj가 ceratin 유형인지 실제로 알고 싶을 때 문자열 비교.

나는

if (dt.Columns[col] is DateTime) 
..... 
else 
    if (dt.Columns[col] is Date) 
    ... 

난 그냥 데이터 형식 검사를 수행하는 다른 방법을 보여주는하고 함께 갈 것입니다. 당신은 스스로를 말했고, 그것은 "날짜"와 비교할 수 없습니다.

1

나는

switch (dt.Columns[col].DataType.FullName) 
{ 
    case "System.DateTime": 
     formatedVal = ((DateTime)dataRow[col]).ToString("d"); 
     break; 

    case "System.Date": 
     formatedVal = ((DateTime)dataRow[col]).ToString(); 
     break; 

    default: 
     formatedVal = dataRow[col].ToString(); 
     break; 
}