2017-12-18 13 views
2

SQL 서버 데이터베이스에서 reader.GetValue을 반복하고 있지만 모든 테이블에는 데이터 유형 열 Date이 있습니다. 테이블에서 데이터를 볼 때 'no-time'과 함께 '18 -Dec-17'날짜가 올바르게 표시됩니다.Reader.GetValue 날짜 값

reader의 출력은 '18 -Dec-17 12:00:00 AM'이고 모든 레코드는 날짜 변경에 관계없이 동일하게 12:00:00 AM으로 표시됩니다.

누군가 내가 여기에 무슨 일이 일어나는지 알려줄 수 있으며, 제거 할 수있는 옵션이 있습니까, 아니면 정규식을 사용하거나 교체해야합니까? reader.GetValue(cnt_field)

while (reader.Read()) 
{ 
    while (cnt_field <= reader.FieldCount - 1) 
    { 
     db_output = db_output + "" + reader.GetValue(cnt_field) + " -\t "; 
     cnt_field++; 
    }//WEND 
    cnt_field = 0; 
    db_output = db_output + "\n\r"; 
}//WEND 
+3

같은

뭔가, .NET에는'Date' 전용 데이터 타입이 없다. –

+1

변경할 수 없습니다 - SQL Server에는 날짜 만 포함하는 DATE 데이터 유형이 있습니다. - .NET에는 이러한 유형이 없습니다. SQL Server의 DATE 열은 항상 .NET DateTime에 매핑되므로 항상 * 00 * 00 * 00 * 시간 부분을 포함합니다. –

답변

4

당신은 암시 적 reader.GetValue(...).ToString()을 다하고 있습니다.

다음 내용은 DateTime의 기본 표현입니다. dotNET에는 별도의 Date 유형이 없습니다.

루프 내에서 DateTime 값을 감지하고 원하는 형식을 적용해야합니다. 내 지식

while (cnt_field <= reader.FieldCount - 1) 
{ 
    object value = reader.GetValue(cnt_field); 
    if (value is DateTime) 
    db_output += ((DateTime)value).ToShortDateString(); // apply a std/custom Date format 
    else 
     db_output += value.ToString(); 

    db_output += " -\t "; 
    .... 
} 
2

호 는 반환되는 DateTime 날짜를 나타내는 (AN object로서 "박스"). 지금; 데이터베이스와 DateTime에있는 날짜 - 시간 값 형식이 아니며 날짜/시간의 원시 숫자 값입니다. 문자열을 문자열로 연결할 때 현재 문화권 및 기본 형식 지정자를 적용하는 기본값 인 .ToString()이 사용됩니다. 그래서 : 그 이없는 경우 당신은을 의도 : 당신은 당신이 의도를 이야기해야합니다 :

당신은 명시 적 문화 지정할 수 있습니다
var when = (DateTime)reader.GetValue(cnt_field); 
db_output = db_output + "" + when.ToString(chosenFormat) + " -\t "; 

-CultureInfo.InvariantCulture은 일반적으로 좋은 선택 등 로그온

또는 custom format specifiers을 선택하여 원하는 형식을 만들 수 있습니다. 당신은 너무, "dd-MMM-yy" 할 수 있습니다 : "" + reader.GetValue(...)

db_output = db_output + "" + when.ToString("dd-MMM-yy") + " -\t "; 
+0

위대한 대답 역시 감사합니다 .-) – BH7