0

MySQL 4.1.14NT を使用しています。

ADO.NET と MySQL コネクタを使用して、日時フィールドを持つテーブルをクエリしています

クエリを実行すると、「MySQL の日付/時刻の値を System.DateTime に変換できません」というエラーが表示されます。

私が見つけた唯一の回避策は、データベースの接続文字列に「Allow Zero Datetime=true」を追加することです。

これでエラーは止まりますが、データセットでは特定の日付フィールドが日付 01/01/0001 00:00:00 で返されますが、クエリ ブラウザーでクエリを実行すると、通常の日付値になります。

私に何ができる?

編集:

CREATE TABLE `notam_status` (
  `DEMAND_ID` decimal(6,0) NOT NULL default '0',
  `NOTAM_KEY` varchar(25) NOT NULL default '',
  `AIRPORT` varchar(5) default NULL,
  `ARR_DEP` char(1) default NULL,
  `DEP_DATETIME` datetime default NULL,
  `ARR_DATETIME` datetime default NULL,
  `NOTAM_TEXT` text,
  `LAST_MOD_DATETIME` datetime default NULL,
  `STATUS` char(1) default NULL,
  `STATUS_BY` varchar(15) default NULL,
  `STATUS_DATETIME` datetime default NULL,
  `SOURCE_ID` char(1) default NULL,
  `ACCOUNT_ID` varchar(10) default NULL,
  `NOTAM_ID` varchar(9) default NULL,
  `NOTAM_PART` decimal(3,0) default NULL,
  `CNS_LOCATION_ID` varchar(10) default NULL,
  `REMARKS` text,
  `TRIPNUMBER` decimal(6,0) default NULL,
  PRIMARY KEY  (`DEMAND_ID`,`NOTAM_KEY`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='InnoDB free: 11264 kB; InnoDB free: 7168 kB';

私が使用しているコードは次のとおりです。

    private List<Notam> GetNotamsFor(string airport)
            {
                List<Notam> result = new List<Notam>();

                string sql =
                    @"SELECT a.source_id, a.account_id, a.notam_id, a.notam_part, a.cns_location_id, cast(a.last_mod_datetime as datetime), a.notam_report, a.q_code, a.effective_datetime, a.expire_datetime
                      FROM notams a
                      WHERE (a.cns_location_id = ?airport
                         OR a.cns_location_id =  ?kairport)
                         AND a.source_id != 'F'
                         AND (a.cancel_datetime IS NULL OR a.cancel_datetime > UTC_Timestamp())
                         AND (a.delete_datetime IS NULL OR a.delete_datetime > UTC_Timestamp())
                        ";

                MySqlParameter[] parameters = new MySqlParameter[]
                {
                    new MySqlParameter
                    {
                         ParameterName="airport",
                         MySqlDbType=MySqlDbType.String,
                         Value=airport
                    },
                    new MySqlParameter
                    {
                         ParameterName="kairport",
                         MySqlDbType=MySqlDbType.String,
                         Value="k"+airport
                    }
                };

                DataSet ds = RunMySqlQuery(sql, "weather", parameters);

                // If I look at the dataset, the field "last_mod_datetime' 
                //  has the value 01/01/0001 00:00:00

                if (ds.Tables.Count > 0)
                    foreach (DataRow r in ds.Tables[0].Rows)
                    {
                        result.Add(NotamFiller.FillFrom(r));
                    }

                return result;
            }

 private DataSet RunMySqlQuery(string sql, string database, MySqlParameter[] parameters)
        {

            DataSet ds = new DataSet();
            try
            {
                MySqlCommand mc = new MySqlCommand(sql, _MySqlConnection);
                if (parameters != null)
                    mc.Parameters.AddRange(parameters);
                var adapter = new MySqlDataAdapter(mc);
                adapter.Fill(ds);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            return ds;
        }
4

2 に答える 2

0

テーブルにデータを入力する他のコードは、日付フィールドを更新するときにMySqlDBType.TimestampではなくMySqlDBType.Stringを使用してMySqlParameterを使用し、日付フィールドに01-01-000100:00を格納することになりました。

于 2013-02-07T14:53:56.683 に答える
0

テーブルにデータを入力したコードに問題があることがわかりました。MySQLParameter クラスの MySqlDBType が Timestamp ではなく String に設定されました

于 2013-02-06T19:24:47.987 に答える