[c#] C #을 사용하여 DateTime 형식을 SQL 형식으로

C #에서 현재 날짜 시간 형식을 저장하고 쿼리에 yyyy-MM-dd HH:mm:ss사용할 수 있도록 SQL Server 날짜 형식으로 변환 하려고 UPDATE합니다.

이것은 내 첫 번째 코드였습니다.

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");

날짜의 출력은 괜찮지 만 시간은 항상 “12:00:00″이므로 코드를 다음과 같이 변경했습니다.

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.TimeOfDay.ToString("HH:mm:ss");

이 컴파일 오류가 발생했습니다.

FormatException이 처리되지 않았습니다.

그리고 구문 분석이 필요하다고 제안했습니다. 그래서 여기 StackOverflow에서 내 연구에 따라 코드에 이것을 시도했습니다.

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss");

또는

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss");

그러나 그것은 주어진 문맥에 유효하지 않은 방법이라는 것을 말하고 있습니다. 나는 내 문제에 대한 해결책을 찾으려고 노력했고 지금은 두 시간 동안 갇혀 있었다. 나는 여전히 C #에 익숙하지 않습니다. 제발 도와 주시겠습니까?



답변

아래에서 시도

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");


답변

표준 datetime 형식 “s”를 사용하면 국제화 호환성 (MM / dd 대 dd / MM)도 보장됩니다.

myDateTime.ToString("s");

=> 2013-12-31T00:00:00

완전한 옵션 : (코드 : 샘플 결과)

d: 6/15/2008
D: Sunday, June 15, 2008
f: Sunday, June 15, 2008 9:15 PM
F: Sunday, June 15, 2008 9:15:07 PM
g: 6/15/2008 9:15 PM
G: 6/15/2008 9:15:07 PM
m: June 15
o: 2008-06-15T21:15:07.0000000
R: Sun, 15 Jun 2008 21:15:07 GMT
s: 2008-06-15T21:15:07
t: 9:15 PM
T: 9:15:07 PM
u: 2008-06-15 21:15:07Z
U: Monday, June 16, 2008 4:15:07 AM
y: June, 2008

'h:mm:ss.ff t': 9:15:07.00 P
'd MMM yyyy': 15 Jun 2008
'HH:mm:ss.f': 21:15:07.0
'dd MMM HH:mm:ss': 15 Jun 21:15:07
'\Mon\t\h\: M': Month: 6
'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00

.NET Framework에서 지원 : 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
참조 : DateTime.ToString메서드


답변

정답은 이미 “매개 변수 사용”이 주어졌습니다. 날짜 형식을 지정하고 SQL-Server에 문자열로 전달하면 서버 측에서 날짜가 해석되는 방식에 따라 달라 지므로 오류가 발생할 수 있습니다. 유럽에서는 2012 년 12 월 1 일을 나타 내기 위해 ‘1.12.2012’라고 쓰지만 다른 국가에서는 1 월 12 일로 취급 될 수 있습니다.

SSMS에서 직접 명령문을 발행 할 때 나는 yyyymmdd매우 일반적인 형식 을 사용합니다 . 지금까지 작업 한 다양한 설치에서 문제가 발생하지 않았습니다.

좀 이상하지만 모든 버전에서 작동하는 드물게 사용되는 또 다른 형식이 있습니다.

select { d '2013-10-01' }

2013 년 10 월 1 일을 반환합니다.

select { ts '2013-10-01 13:45:01' }

10 월 1 일 오후 1:45:01에 반환됩니다.

사용 매개 변수와에 난 강력하게 조언 결코 자체적으로 포맷 된 명령문 조각을 함께 붙여 넣어 자신의 SQL 코드를 포맷 . SQL 주입 및 이상한 오류에 대한 항목입니다 (부동 값 형식 지정은 또 다른 잠재적 문제).


답변

이렇게하면 첫 번째 코드가 작동합니다.

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //Remove myDateTime.Date part 


답변

문제는 DateTime현재까지만 잘리는 “Date”속성에 있습니다. 다음과 같이 변환 할 수 있습니다.

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // <- No Date.ToString()!


답변

내가 찾고 있던 대답은 다음과 같습니다.

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");

나는 또한 당신이 이렇게 할 수 있다는 것을 배웠다.

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString(myCountryDateFormat);

여기서 myCountryDateFormat은 요구 사항에 따라 변경 사항을 충족하도록 변경할 수 있습니다.

“이 질문은 여기에 이미 답변이있을 수 있습니다.”라는 태그는 실제로 질문에 대답하지 않았습니다. 보시다시피 “.Date”를 생략하는 대신 사용했기 때문입니다. .NET의 새로운 프로그래머에게는 매우 혼란 스럽습니다.


답변

현재 날짜를 테이블에 저장하고 싶다면

GETDATE ();

또는이 함수를 매개 변수 로 전달

예. ‘update tblname set curdate = GETDATE () where colname = 123’