一個@符號引發的血案:Access資料庫無法更新

來源:互聯網
上載者:User

在昨天下午就遇到了這個問題,但是調試一直都能成功,但是資料卻總是沒有更新。在網上搜尋了下,這方面的東西還是挺少的,可能是因為Access資料庫用得少,或者是在更新的時候使大多人不用參數方式的原因吧,今天我把我的經曆記錄一下吧。以後也可以做參考。

原來有誤的代碼:

 
  1. StringBuilder strSql = new StringBuilder();  
  2. strSql.Append("update news_Table set ");   
  3.  strSql.Append("NewsTitle=@NewsTitle,");  
  4.  strSql.Append("NewsContent=@NewsContent,");   
  5.  strSql.Append("NewsReporter=@NewsReporter");     
  6. strSql.Append(" where NewsID=@NewsID ");  
  7. OleDbParameter[] parameters = {     
  8.  new OleDbParameter("@NewsID", OleDbType.Integer,4),    
  9. new OleDbParameter("@NewsTitle", OleDbType.VarChar),    
  10.  new OleDbParameter("@NewsContent", OleDbType.VarChar),    
  11. new OleDbParameter("@NewsReporter", OleDbType.VarChar)};  
  12.  parameters[0].Value = model.NewsID;   
  13. parameters[1].Value = model.NewsTitle;  
  14. parameters[2].Value = model.NewsContent;   
  15. parameters[3].Value = model.NewsReporter;    
  16. return DbHelperOleDb.ExecuteSql(strSql.ToString(), parameters); 

因為這個代碼是使用動軟代碼產生器自動產生的,所以我可以肯定代碼是無誤的,可是問題出在我修改了參數,自動產生的程式碼裡包含可以更新ID,我資料庫裡的ID是自動成長的,所以不能更新,我也就直接刪除了ID,變成上面的錯誤碼。就這樣,問題就出來啦,不管我如何調試,都無濟於事,始終不能更新到資料庫。

在琢磨很久之後,換成更加不同的方式來更新資料庫,也就是不使用@傳參數,直接使用++方式的代碼。

++方式的代碼:

 
  1. string strSql;  
  2. strSql="update news_Table 
  3. set NewsTitle='"+model.NewsTitle+"',NewsContent='"+model.NewsContent+"',NewsReporter='"+   
  4. model.NewsReporter+"'  where NewsID="+model.NewsID;    
  5. return DbHelperOleDb.ExecuteSql(strSql); 

使用這種方式可以很順利的更新資料庫裡的資料。

這樣的結果讓我很抓狂。我不知道該怎麼辦好,我想不通為什麼傳參數的方式不行,但是直接寫的方式就可以。接著就是我瘋狂地在Google上搜尋的這方面的資料,但是搜到這方面和我同樣的問題的日誌不多。但是還是有解決這個問題的解決方案,那就是參數賦值順序和傳入的時候一致,下面貼出正確的代碼:

正確傳參數的代碼:

 
  1. StringBuilder strSql = new StringBuilder();  
  2.  strSql.Append("update news_Table set ");  
  3.  strSql.Append("NewsTitle=@NewsTitle,");   
  4.   strSql.Append("NewsContent=@NewsContent,");  
  5.   strSql.Append("NewsReporter=@NewsReporter");  
  6.   strSql.Append(" where NewsID=@NewsID ");   
  7.  OleDbParameter[] parameters = {   
  8. new OleDbParameter("@NewsTitle", OleDbType.VarChar),    
  9. new OleDbParameter("@NewsContent", OleDbType.VarChar),    
  10. new OleDbParameter("@NewsReporter", OleDbType.VarChar),    
  11. new OleDbParameter("@NewsID", OleDbType.Integer,4)};    
  12. parameters[0].Value = model.NewsTitle;    
  13. parameters[1].Value = model.NewsContent;   
  14.  parameters[2].Value = model.NewsReporter;    
  15. parameters[3].Value = model.NewsID;     
  16. return DbHelperOleDb.ExecuteSql(strSql.ToString(), parameters); 

只是參數順序改變了一下就可以正常更新Access資料庫啦,也許這應該是Access的一個Bug吧,也許Access本來就如此,比MSSQL文法要嚴格。

總結

Access和MSSQL還是有不同的,不能夠一味的按照MSSQL的方式去解決Access上的問題,只是有一些相同。

原文標題:Access使用參數方法更新資料庫的問題

連結:http://www.cnblogs.com/Jane_Wang/archive/2010/08/07/1794845.html

相關文章

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.