1)异常:IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。
此问题主要原因是对Access执行的SQL语句中包含了Access不支持的成分(如Sql Server中的函数)。
2)无法Update
当迁移到Access上以后发现表无法执行跟新操作,而且也不报什么错误。
此问题的主要原因是DAL层中构建的Sql语句和其匹配的参数顺序不一致引起的。如下所示:
Code
OleDbCommand comm = DALMailFactory.CreateOleDbCommand();
comm.CommandText = "update mailcontacts set name = @name,email = @email,description = @description,username = @username where id = @id";
//comm.Parameters.AddWithValue("@id", ent.Id); //#1
comm.Parameters.AddWithValue("@name", ent.Name);
comm.Parameters.AddWithValue("@email", ent.Email);
comm.Parameters.AddWithValue("@description", ent.Description);
comm.Parameters.AddWithValue("@username", ent.UserName);
comm.Parameters.AddWithValue("@id", ent.Id); //#2
return OleDbHelper.ExecuteNonQuery(comm);
/**//*
* CommandText中参数的顺序是 @name,@email,@desciption,@username,@id)
*
* 下面的参数赋值如果将@id写到 #1的位置则无法更新。必须将@id写到#2的位置来和CommandText中参数的顺序一致才可以更新成功。
*/
3) INSERT INTO 语句的语法错误
造成此错误的主要原因是写SQL语句的时候偷懒了,表中的字段没有加[]。如下所示:
Code
insert into userbaseinfo([username],[password],[name].
values(@username,@password,@name.
/*
如果username,password,name 没加[]则可能会引起此错误。
不是说这3个字会引起此错误,我语句后面还有很多字段省略没写。
*/