3

DateTime値をDbParameterとしてクエリに渡す際に問題が発生しました。DateTime値の時間部分が削除されているようです。

C#のサンプルコードは次のとおりです。

DbProviderFactory _factory = OleDbFactory.Instance;

DbCommand cmd = _factory.CreateCommand();
cmd.CommandText = "INSERT INTO SomeTable (SomeDateField) VALUES (?)";

DbParameter p = _factory.CreateParameter();
p.ParameterName = ""; // Not necessary
p.Value = DateTime.Now; // assume Time != 00:00:00
p.DbType = DbType.Date; // DateTime and DateTime2 don't work

cmd.Parameters.Add(p);

私の問題は、Dateパラメーターがその時間部分でAccessに到達していないようであり、SomeDateFieldが常に00:00:00を時間として持っていることです。

私は次のようなことをしたくありません:

cmd.CommandText = "INSERT INTO SomeTable (SomeDateField) VALUES (#" + aDateTimeString + "#)";
4

3 に答える 3

0

OleDbType.DateTimeの代わりに使用する場合はDbType.Date、確実に機能します。

しかし、あなたの投稿から理解しているように、あなたはそれほど具体的にしたくはなく、より一般的なDbType列挙型(およびクラス)を使用しますか?

ただし、データアクセス層ではより具体的なOleDbクラスを使用する必要があると思います。あまり指定されていない「DbType」クラスを使用するのは、ちょっと役に立たないです。別のデータベースタイプをターゲットにしている場合、各DBMSが独自の方言を使用するため、SQL構文も変更しなければならない可能性が非常に高いからです。時々マイナーな変更だけですが、それでも...)。

于 2011-07-01T19:16:46.007 に答える
0

SomeDateFieldのデータ型がisDateTimeであり、 notであることを確認してくださいDate。また、作ってみてください

p.DbType = DbType.DateTime;
于 2011-07-01T19:12:38.053 に答える