0

日付列名が proddate として定義され、DATE として定義されているテーブルがあります。

値をテーブルに書き込むコードは次のとおりです。

cmd.Parameters.Add("@Mydate", MySqlDbType.DateTime).Value = Convert.ToDateTime(MyArray[4]).ToString(); 

これにより、0000-00-00 の結果が得られます

に変更すると

cmd.Parameters.Add("@Mydate", MySqlDbType.DateTime).Value = Convert.ToDateTime(MyArray[4]);

結果は正しいです。例: 2013-11-14

ただし、数行下にこのコードがあります

cmd1.Parameters.Add("@date", MySqlDbType.DateTime).Value = Convert.ToDateTime(MyArray[4].ToString());

これにより、エラーは発生しません。テーブルで正しい結果が得られます

そして、同じメソッドでこのコードを使用した数行後:

cmd3.Parameters.Add("@Mydate", MySqlDbType.DateTime).Value = MyArray[4].ToString();

これもエラーになりません

最後の 2 行は、テストのために間違えました。ただし、最後の 2 つの例の列は DATE 形式として定義されています

何か案が ?それとも、Mysql の謎の世界に歓迎されますか?

PS: MYSQL CONNECTOR 6.7.4.0 .NET3.5 と C# 2008 Express を使用しています。私のサーバーではMYSQLは5.0です

4

1 に答える 1

1

最初のバージョンでは、値のデフォルト形式を使用して、値を に変換してから文字列に変換してDateTimeますDateTime。その後、MySQL はそれを解析しようとしますが、おそらく失敗します。

2 番目のバージョンでは、値を として解析し、DateTimeそれを MySQL に直接提供します。使用している入力形式に注意する必要がありますが、これが最善の方法です。

3 番目のバージョンは 2 番目のバージョンと似ていますが、明示的なToString呼び出しのみが含まれています。MyArrayタイプが の場合string[]、それは基本的にノーオペレーションです。

4 番目のバージョンは、文字列入力を MySQL に直接提供しており、おそらくそれ自体を解析できます。ただし、その形式は避けることをお勧めします。.NET コードで解析すると、より詳細に制御できます。

于 2013-11-14T14:50:27.657 に答える