MySQLの日付/時刻値をSystem.DateTimeに変換できません


86

このエラーが発生します:

MySQLの日付/時刻値をSystem.DateTimeに変換できません

MySQLデータベースからデータをフェッチしようとしている間。私が持っている日付の私のMySQLデータベース内のデータ型を。しかし、それをデータテーブルに取得しているときに、上記のエラーが発生します。

どうすればこれを修正できますか?


回答:


51

「MySQLの日付/時刻値をSystem.DateTimeに変換できません」をグーグルで検索すると、VisualStudioからMySQLにアクセスする際の問題への参照が多数表示されます。それはあなたの文脈ですか?

提案される1つの解決策は次のとおりです。

これはバグではありませんが、予想される動作です。接続オプションのマニュアルを確認し、添付の写真のように「ゼロ日時を許可」をtrueに設定すると、エラーが消えます。

参照:http//bugs.mysql.com/bug.php?id = 26054


2
日付/時刻列のデータとして「0000-00-0000:00:00」を使用しないことをお勧めします。.netを使用している場合は、データで実際の日付値を使用してください。ただし、MySQLは任意の日付を処理できます。すべての日付/時刻の値をスキャンする必要があります。
Bimal Poudel 2016

215

Convert Zero Datetime=True次に、接続文字列に追加する必要があります。

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

3
ありがとう!参考:これは、SQLServer接続文字列ではなくMySQL接続文字列に適用されます。
jp2code 2014年

私の時間を節約しました。魅力のように機能
Null Pointer

+ 1-完璧です!列が埋められていないときにテーブルMySQLに書き込みを行うと、日時がゼロになりました。私は今から0970-01-01に変更することを好みます。どうもありがとうございました
Drako

21

私は両方を追加しましたConvert Zero Datetime=TrueAllow Zero Datetime=Trueそしてそれはうまくいきます


3

日時の値を文字列としてプルダウンDateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles);し、次の操作を実行します。データベースから返す日付の日付形式を設定するだけです。おそらくそれはyyyy-MM-dd HH:mm:ssです。少なくとも私のためです。

詳細については、こちらをご覧ください DateTime.ParseExact



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

(常に設定されていたInsertedTimeとは対照的に)行が更新されたときにのみ明示的に設定された「UpdateTime」列からデータを読み込もうとしたシナリオがありました。この場合、私は次のMySqlDataReader.GetMySqlDateTimeような方法を使用しました。

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

0

場合は「ゼロ日時=真の許可」機能していないし、次sollutionsを使用します-

これを接続文字列に追加します: "allow zero datetime = no" -これにより型キャストが完全に機能しました。


0

Stimulsoftレポートで、このパラメーターを接続文字列に追加します(データソースを右クリック->編集)

Convert Zero Datetime=True;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.