MySQL 날짜 / 시간 값을 System.DateTime으로 변환 할 수 없습니다.


85

이 오류가 발생합니다.

MySQL 날짜 / 시간 값을 System.DateTime으로 변환 할 수 없습니다.

MySQL 데이터베이스에서 데이터를 가져 오는 동안. 나는이 날짜 내 MySQL 데이터베이스에서 데이터 유형을. 그러나 내 데이터 테이블로 검색하는 동안 위의 오류가 발생합니다.

이 문제를 어떻게 해결할 수 있습니까?


답변:


51

"MySQL 날짜 / 시간 값을 System.DateTime으로 변환 할 수 없음"을 Google에 검색하면 Visual Studio에서 MySQL에 액세스하는 문제에 대한 많은 참조를 볼 수 있습니다. 그것이 당신의 맥락입니까?

제안 된 한 가지 해결책은 다음과 같습니다.

이것은 버그가 아니라 예상되는 동작입니다. 연결 옵션에서 매뉴얼을 확인하고 첨부 된 사진에서와 같이 "Allow Zero Datetime"을 true로 설정하면 오류가 사라집니다.

참조 : http://bugs.mysql.com/bug.php?id=26054


2
날짜 / 시간 열의 데이터로 '0000-00-00 00:00:00'을 사용하지 않는 것이 좋습니다. .net을 사용하는 경우 데이터에 실제 날짜 값을 사용하십시오. 그러나 MySQL은 모든 날짜를 처리 할 수 ​​있습니다. 모든 날짜 / 시간 값을 스캔해야합니다.
Bimal Poudel

212

Convert Zero Datetime=True연결 문자열에 추가해야합니다 . 예를 들면 다음과 같습니다.

server=localhost;User Id=root;password=mautauaja;Persist Security Info=True;database=test;Convert Zero Datetime=True

3
감사! 참고 : 이것은 SQL Server 연결 문자열이 아닌 MySQL 연결 문자열에 적용됩니다.
jp2code 2014-06-19

시간을 절약했습니다. 마법처럼 일했다
널 포인터

+1-완벽합니다! 열이 채워지지 않았을 때 MySQL 테이블에 0 datetime을 쓰기 때문에 날짜 시간이 0이었습니다. 지금부터 0970-01-01로 변경하는 것을 선호합니다. 감사합니다
Drako

21

나는 Convert Zero Datetime=True& 둘 다 추가 Allow Zero Datetime=True했고 잘 작동합니다.


3

datetime 값을 문자열로 끌어 내고 다음을 수행 DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles);합니다. 데이터베이스에서 반환하는 날짜에 대해 날짜 형식을 설정하기 만하면됩니다. 대부분 yyyy-MM-dd HH:mm:ss. 적어도 나를위한 것입니다.

여기에서 자세한 정보를 확인하십시오. DateTime.ParseExact


2

MySql이 유닉스 타임 스탬프를 문자열로 변환하도록합니다. mysql 함수 FROM_UNIXTIME (113283901) 사용


2

나는 또한 같은 문제에 직면했고 열 이름과 유형을 얻었습니다. 그런 다음 테이블 이름에서 캐스트 (col_Name as Char). 이런 식으로 문제가 '0000-00-00 00:00:00'으로 표시되면 유효한 날짜와 시간으로 업데이트하여 내 경우에 오류가 사라집니다.


1

MySql에서 사용하는 날짜 및 시간과 완전히 호환되는 응용 프로그램을 만들 수 있습니다. 애플리케이션이 런타임에 실행될 때이 코드를 제공하십시오. 먼저 응용 프로그램 이벤트로 이동하십시오. 도구 목록에서

  1. 프로젝트로 이동
  2. 프로젝트 속성
  3. 응용 프로그램 탭을 선택하십시오.
  4. 애플리케이션 이벤트보기

새 파일이 열립니다. 이 파일에는 애플리케이션 시작시 사용되는 코드가 포함되어 있습니다.

새 파일에 다음 코드를 작성하십시오.

 Partial Friend Class MyApplication

    Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
        My.Application.ChangeCulture("en")
        My.Application.ChangeUICulture("en")
        My.Application.Culture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd"
        My.Application.Culture.DateTimeFormat.LongDatePattern = "yyyy-MM-dd"
        My.Application.Culture.DateTimeFormat.LongTimePattern = "HH:mm:ss"
        My.Application.Culture.DateTimeFormat.ShortTimePattern = "HH:mm:ss"
    End Sub


End Class

1

연결 문자열을 변경하는 대신 개체 의 IsValidDateTime속성을 사용하여 MySqlDateTime개체를 DateTime.

행에 대한 업데이트가있을 때만 명시 적으로 설정된 "UpdateTime"열에서 데이터를로드하려고하는 시나리오가있었습니다 (항상 설정된 InsertedTime과 반대). 이 경우 다음 MySqlDataReader.GetMySqlDateTime과 같은 방법을 사용했습니다 .

using (MySqlDataReader reader = await MySqlHelper.ExecuteReaderAsync(...))
{
    if (await reader.ReadAsync())
    {
        DateTime? updateTime = reader.GetMySqlDateTime("UpdateTime").IsValidDateTime ? (DateTime?)reader["UpdateTime"] : null;
    }
}

0

경우 "제로 날짜가 true = 허용" 다음 sollutions을 사용 후 작동하지 않습니다 : -

연결 문자열에 "allow zero datetime = no" 를 추가하면 유형 캐스트가 완벽하게 작동합니다.


0

Stimulsoft 보고서에서이 매개 변수를 연결 문자열에 추가합니다 (데이터 소스-> 편집을 마우스 오른쪽 버튼으로 클릭).

Convert Zero Datetime=True;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.