6


3

私はC#を使ってMS Accessからデータを読み/更新します。 私のコードは:

UpdateLastLogin(int userid、DateTime logintime) OleDbParameter [] prms = new OleDbParameter [] {new OleDbParameter( "@ LastLogin"、logintime)}; using(DAL dal = new DAL()){dal.UpdateRow(sql、false、prms); }}

日付に関しては、私は問題を抱えています。 これにより、「条件式でのデータ型の不一致」が発生します。エラー。 (より簡単にするためにWHERE句を削除しました)[LastLogin] =を囲むことにしましたか。 一重引用符で囲まれた疑問符、#記号。 助けにならない。 AccessおよびOleDbプロバイダを使用してDateTimeオブジェクトを処理する方法についてのご意見があれば大歓迎です。

前もって感謝します。

6 Answer


4


OleDbと日付に既知の問題があります。 次のようにしてみてください。

OleDbParameter p = OleDbParameterとしてのパラメータ。 if(null == p)parameter.DbType = DbType.DateTime;そうでなければp.OleDbType = OleDbType.Date;

または明示的なフォーマット文字列を使用します。

value.ToString( "yyyy-MM-dd hh:mm:ss")


1


私はこれを次のコードで解決しました

OleDbCommand cmd = new OleDbCommand(qry、cnn); cmd.Parameters.Add( "datenow"、OleDbType.Date); cmd.Parameters ["datenow"]。値= DateTime.Now;


0


まず、あなたのSQL文は以下のようにするべきではありません。

"UPDATE Customers SET LastLogin = @ LastLogin"

第二に、日付の不一致エラーを受け取っている理由はおそらくあなたの合格でしょうか。実際のlogintimeパラメータの代わりにLastLoginフィールドにあなたの日時として。


0


たぶん試して

DateTime.Now.ToShortDateString() '' DateTime.Now.ToShortTimeString()

代わりに、それを文字列として渡してください(そしておそらく#thenで囲みます)


0


そうではありません

"顧客の更新SET LastLogin = '@ LastLogin'"

そして@LastLoginは

logintime.ToString( "yyyy-MM-dd hh:mm:ss")

_edit_あなたは全体をインライン化していませんか?

"顧客の更新SET LastLogin = '" logintime.ToString( "yyyy-MM-dd hh:mm:ss") "'"


0


パラメータの "DBTYPE"プロパティを適切な日付、日付時刻、または日付時刻2として識別するように設定してみてください。

prms [0] .DbType = DbType.DateTime;

新しいOleDbParameter()呼び出しには7つのシグネチャがあります。そのため、シグネチャインスタンスを変更することも、この場合は1つのパラメータしかないので上記でサンプリングしたように明示的に行うこともできます。