날짜 시간.MinValue 및 SqlDateTime 오버플로
검사를 원하지 않습니다txtBirthDate
그래서 합격하고 싶습니다.DateTime.MinValue
데이터베이스에
내 코드:
if (txtBirthDate.Text == string.Empty)
objinfo.BirthDate = DateTime.MinValue;
else
objinfo.BirthDate = DateTime.Parse(txtBirthDate.Text);
DateTime.MinValue
Date = {1/1/0001 12:00:00 AM}
SQL 오류가 발생했습니다.
SqlDateTime 오버플로입니다.1/1/1753 오전 12:00 ~ 12/31/9999 오후 11:59:59 사이여야 합니다.
나는다니이해수이없습할해지그런왜만지하다없▁i니습.DateTime.MinValue
데이터베이스에 삽입할 수 없는 잘못된 날짜 시간을 반환합니다.이러한 상황을 어떻게 처리해야 합니까?
매우 간단하여 사용을 피할 수 있습니다.DateTime.MinValue
사용하다System.Data.SqlTypes.SqlDateTime.MinValue
대신.
기적으사안함용로본함을 사용하지 DateTime.MinValue
결측값을 나타냅니다.사용할 수 없습니다.DateTime.MinValue
필드에는 입니다. SQL Server 1753은 SQL Server 1753입니다.
여러분의 신에, 당의를 .BirthDate
을 대다Nullable<DateTime>
(일명)DateTime?
), 으로 설정합니다.null
당신이 가치가 없을 때.또한 데이터베이스 필드가 null인지 확인합니다.그렇다면 당신은 단지 그것이 당신의 것인지 확인하기만 하면 됩니다.null
로 끝납니다.NULL
값을 입력합니다.정확한 방법은 데이터 액세스에 따라 달라지는데, 이에 대해서는 아무 것도 알려주지 않았습니다.
음... SQL 최소 날짜를 얻는 것은 꽤 간단합니다.
DateTime sqlMinDateAsNetDateTime = System.Data.SqlTypes.SqlDateTime.MinValue.Value;
오래된 질문이지만 다른 해결책은 데이터베이스 열에 datetime2를 사용하는 것입니다. MSDN 링크
MSDN에서:
1753년 1월 1일부터 9999년 12월 31일까지의 날짜 및 시간 데이터로, 정확도는 3.33밀리초입니다.값은 .000, .003 또는 .007 밀리초 단위로 반올림됩니다.두 개의 4바이트 정수로 저장됩니다.처음 4바이트에는 기준 날짜인 1900년 1월 1일 이전 또는 이후의 일 수가 저장됩니다.기준 날짜는 시스템의 참조 날짜입니다.1753년 1월 1일 이전 날짜 시간 값은 허용되지 않습니다.나머지 4바이트는 자정 이후의 밀리초로 표시되는 시간을 저장합니다.초의 유효 범위는 0 ~ 59입니다.
SQL은 DateTime 값에 대해 C#과 다른 시스템을 사용합니다.
MinValue를 Sentinel 값으로 사용할 수 있으며 MinValue인 경우 null을 개체에 전달하고 DB에 null로 날짜를 저장할 수 있습니다.
if(date == dateTime.Minvalue)
objinfo.BirthDate = null;
여기 당신이 할 수 있는 것이 있습니다.비록 그것을 이루기 위한 많은 방법들이 있지만요.
DateTime? d = null;
if (txtBirthDate.Text == string.Empty)
objinfo.BirthDate = d;
else
objinfo.BirthDate = DateTime.Parse(txtBirthDate.Text);
참고: 데이터베이스 datetime 열이 Allow Null인 경우에만 작동합니다.그렇지 않으면 DateTimed에 대한 표준 최소값을 정의할 수 있습니다.
간단히 말해서, 사용하지 않음DateTime.MinVaue
기본값으로 설정합니다.
몇 가지 다른 것들이 있습니다.MinValues
당신이 어떤 환경에 있는지에 따라, 밖에 있습니다.
Windows CE 프로젝트를 구현하고 프레임워크의 프로젝트를 사용한 적이 있습니다.DateTime.MinValue
(0001년), 데이터베이스MinValue
(1753) 및 UI 컨트롤DateTimePicker
(1970년이었던 것 같습니다.)따라서 이상한 행동과 예상치 못한 결과를 초래한 최소 3개의 MinValues가 있었습니다. (그리고 심지어 4번째 버전(!)도 있었다고 생각합니다. 어디서 왔는지 기억이 나지 않습니다.)
null 가능한 데이터베이스 필드를 사용하고 값을 다음으로 변경합니다.Nullable<DateTime>
대신.코드에 유효한 값이 없을 경우 데이터베이스에도 값이 있으면 안 됩니다. :-)
이 기능을 사용하여 구문 분석을 시도하고 있습니다.
public static bool TryParseSqlDateTime(string someval, DateTimeFormatInfo dateTimeFormats, out DateTime tryDate)
{
bool valid = false;
tryDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
System.Data.SqlTypes.SqlDateTime sdt;
if (DateTime.TryParse(someval, dateTimeFormats, DateTimeStyles.None, out tryDate))
{
try
{
sdt = new System.Data.SqlTypes.SqlDateTime(tryDate);
valid = true;
}
catch (System.Data.SqlTypes.SqlTypeException ex)
{
}
}
return valid;
}
DATTIME2를 사용하는 경우 매개 변수를 DATTIME2로 전달해야 할 수 있습니다. 그렇지 않으면 매개 변수를 DATTIME으로 변환하는 데 도움이 되고 동일한 문제가 발생할 수 있습니다.
command.Parameters.Add("@FirstRegistration",SqlDbType.DateTime2).Value = installation.FirstRegistration;
내선 번호 사용
public static class DateTimeExtensions
{
public static DateTime MinValue(this DateTime sqlDateTime)
{
return new DateTime(1900, 01, 01, 00, 00, 00);
}
}
DateTime date = DateTime.Now;
Console.WriteLine("Minvalue is {0} ", date.MinValue().ToShortDateString());
언급URL : https://stackoverflow.com/questions/15157328/datetime-minvalue-and-sqldatetime-overflow
'programing' 카테고리의 다른 글
demystify Flask app.secret_key (0) | 2023.07.01 |
---|---|
git로 새 파일의 일부만 스테이징하는 방법은 무엇입니까? (0) | 2023.07.01 |
oracle pl/sql DBMS_LOCK 오류 (0) | 2023.07.01 |
Spring-Data-Rest Validator (0) | 2023.07.01 |
유성 앱에서 mongodb에 2열 고유 ID를 추가하려면 어떻게 해야 합니까? (0) | 2023.07.01 |