將DAL層從Sql Server 遷移到 Access 時遇到的問題

來源:互聯網
上載者:User

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

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.