los - Tipo de datos no coinciden en la expresión de criterios | Acceso, OleDb, C#
no coinciden los tipos de datos en la expresión de criterios c# (6)
En primer lugar, su instrucción SQL no debe ser:
"UPDATE Customers SET LastLogin=@LastLogin"
En segundo lugar, la razón por la que está recibiendo el error de desajuste de fecha probablemente será su aprobación ''?'' como el tiempo de su fecha en el campo LastLogin en lugar del parámetro logintime real.
Leo / actualizo datos de MS Access usando C #. Mi código es:
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);
}
}
Cuando se trata de Dates, tengo problemas. Esto arroja un "desajuste del tipo de datos en la expresión de criterios". error. (Eliminé la cláusula WHERE para mantenerlo más simple) ¿Se supone que adjuntaré [LastLogin] =? signo de interrogación con comillas simples, # signos ... no ayuda. Cualquier sugerencia sobre cómo manejar los objetos DateTime con Access y el proveedor de OleDb será muy apreciada.
Gracias por adelantado.
Hay un problema conocido con OleDb y fechas. Intenta hacer algo como:
OleDbParameter p = parameter as OleDbParameter;
if (null == p)
parameter.DbType = DbType.DateTime;
else
p.OleDbType = OleDbType.Date;
O use cadena de formato explícito:
value.ToString("yyyy-MM-dd hh:mm:ss")
Intente configurar la propiedad "DBTYPE" del parámetro para identificarlo como fecha, fecha y hora2 como sea apropiado ...
prms[0].DbType = DbType.DateTime;
Hay 7 firmas para la nueva llamada OleDbParameter (), por lo que puede cambiar la instancia de la firma, o simplemente hacer explícitamente como muestreé anteriormente ya que solo tenía 1 parámetro en este caso.
Lo resolví usando el siguiente código
OleDbCommand cmd = new OleDbCommand(qry, cnn);
cmd.Parameters.Add("datenow", OleDbType.Date);
cmd.Parameters["datenow"].Value = DateTime.Now;
No debería ser
"UPDATE Customers SET LastLogin=''@LastLogin''"
Y @LastLogin debería ser
logintime.ToString("yyyy-MM-dd hh:mm:ss")
editar ¿No podrías simplemente poner en línea todo el asunto?
"UPDATE Customers SET LastLogin=''" + logintime.ToString("yyyy-MM-dd hh:mm:ss") + "''"
tal vez intente
DateTime.Now.ToShortDateString() + '' '' + DateTime.Now.ToShortTimeString()
en su lugar, páselo como String (y tal vez adjunte con #)