私は C# プロジェクトに取り組んでおり、問題に直面しています。このプログラムにより、ユーザーは MySQL データベースに接続し、選択した各テーブルから情報を取得して、データをファイルに書き出すことができます。問題は、スキーマがどのようなものになるのか、どのような値が含まれるのかがわからないためです。
タイムスタンプ列に日付 0000-00-00 00:00:00 が含まれている場合、変換エラーが発生し、何を試しても機能しません。文字列に変換しようとしましたが、DateTime に変換しようとしましたが、常にエラーが発生します。
以下は、現在データを取得しようとしている方法です。
using (ConnectMySQLDB db = new ConnectMySQLDB(databaseSettings))
{
string query = string.Format("SELECT * FROM {0}.{1}", database, table);
Console.WriteLine("Query: {0}", query);
using (MySqlCommand cmd = new MySqlCommand(query, db.conn))
{
using (MySqlDataReader reader = cmd.ExecuteReader())
{
int i = 1;
while (reader.Read())
{
Console.WriteLine("ID: {0}", i);
fieldsAndValues = new Dictionary<string, string>();
foreach (ColumnDataTypes fieldAndType in fieldsAndTypes)
{
Console.WriteLine("Column: {0} Type: {1}", fieldAndType.field, fieldAndType.dataType);
string formattedValue = "";
if (fieldAndType.dataType == "timestamp")
{
DateTime date = DateTime.Parse(reader.GetDateTime(fieldAndType.field).ToString());
formattedValue = date.ToString("yyyyMMdd");
}
else
{
formattedValue = getDBFormattedValue(reader.GetString(fieldAndType.field), fieldAndType.dataType);
fieldsAndValues.Add(fieldAndType.field, formattedValue);
}
}
rows.Add(fieldsAndValues);
i++;
}
}
}
}
次のように、コネクタ文字列に allow zero date と convertzerodate to null オプションも追加しました。
connString = "server=" + server + ";uid=" + username + ";pwd=" + password + ";port=" + port + ";Allow Zero Datetime=true;zeroDateTimeBehavior=convertToNull;Convert Zero Datetime=true";