条件表达式中的数据类型不匹配| Access,OleDb,C#

emr*_*mre 6 c# asp.net oledb ms-access datetime

我使用C#从MS Access读取/更新数据.我的代码是:

public static void UpdateLastLogin(int userid, DateTime logintime) ///logintime = DateTime.Now
{
    string sql = @"UPDATE [Customers] SET [LastLogin]=?";
    OleDbParameter[] prms = new OleDbParameter[] { 
     new OleDbParameter("@LastLogin",logintime)
    };
    using (DAL dal = new DAL())
    {
        dal.UpdateRow(sql, false, prms);
    }
}
Run Code Online (Sandbox Code Playgroud)

谈到日期,我遇到了麻烦.这会引发"条件表达式中的数据类型不匹配".错误.(为了保持简单,我删除了WHERE子句)我是否考虑将[LastLogin] =?括起来?单引号的问号,#符号..没有帮助.任何有关如何使用Access和OleDb提供程序处理DateTime对象的线索将不胜感激.

提前致谢.

Rin*_*lin 5

OleDb 和日期存在一个已知问题。尝试做类似的事情:

OleDbParameter p = parameter as OleDbParameter;
if (null == p)
  parameter.DbType = DbType.DateTime;
else
  p.OleDbType = OleDbType.Date;
Run Code Online (Sandbox Code Playgroud)

或者使用显式格式字符串:

value.ToString("yyyy-MM-dd hh:mm:ss")
Run Code Online (Sandbox Code Playgroud)


Jam*_*mes 0

首先,你的 SQL 语句不应该是:

"UPDATE Customers SET LastLogin=@LastLogin"
Run Code Online (Sandbox Code Playgroud)

其次,您收到日期不匹配错误的原因可能是您传递的“?” 作为您的日期时间输入 LastLogin 字段,而不是实际的登录时间参数。