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個字會引起此錯誤,我語句後面還有很多欄位省略沒寫。
*/