このエラーが発生します:
MySQLの日付/時刻値をSystem.DateTimeに変換できません
MySQLデータベースからデータをフェッチしようとしている間。私が持っている日付の私のMySQLデータベース内のデータ型を。しかし、それをデータテーブルに取得しているときに、上記のエラーが発生します。
どうすればこれを修正できますか?
このエラーが発生します:
MySQLの日付/時刻値をSystem.DateTimeに変換できません
MySQLデータベースからデータをフェッチしようとしている間。私が持っている日付の私のMySQLデータベース内のデータ型を。しかし、それをデータテーブルに取得しているときに、上記のエラーが発生します。
どうすればこれを修正できますか?
回答:
「MySQLの日付/時刻値をSystem.DateTimeに変換できません」をグーグルで検索すると、VisualStudioからMySQLにアクセスする際の問題への参照が多数表示されます。それはあなたの文脈ですか?
提案される1つの解決策は次のとおりです。
これはバグではありませんが、予想される動作です。接続オプションのマニュアルを確認し、添付の写真のように「ゼロ日時を許可」をtrueに設定すると、エラーが消えます。
Convert Zero Datetime=True
次に、接続文字列に追加する必要があります。
server=localhost;User Id=root;password=mautauaja;Persist Security Info=True;database=test;Convert Zero Datetime=True
日時の値を文字列としてプルダウンDateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles);
し、次の操作を実行します。データベースから返す日付の日付形式を設定するだけです。おそらくそれはyyyy-MM-dd HH:mm:ss
です。少なくとも私のためです。
詳細については、こちらをご覧ください DateTime.ParseExact
MySqlにUNIXタイムスタンプを文字列に変換させます。mysql関数FROM_UNIXTIME(113283901)を使用します
私も同じ問題に直面し、列名とそのタイプを取得しました。次に、テーブル名から(col_Name as Char)をキャストします。このようにして、問題を「0000-00-00 00:00:00」として取得し、有効な日時として更新して、エラーが解消されます。
MySqlで使用される日付と時刻と完全に互換性のあるアプリケーションを作成できます。アプリケーションが実行時に実行されるときに、このコードを提供します。まず、アプリケーションイベントに移動します。ツールのリスト
これにより、新しいファイルが開きます。このファイルには、アプリケーションの起動時に使用されるコードが含まれています。
その新しいファイルに次のコードを記述します。
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
接続文字列を変更する代わり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;
}
}