一個@符號引發的血案:Access數據庫無法更新
在昨天下午就遇到了這個問題,但是調試一直都能成功,但是數據卻總是沒有更新。在網上搜索了下,這方面的東西還是挺少的,可能是因為Access數據庫用得少,或者是在更新的時候使大多人不用參數方式的原因吧,今天我把我的經歷記錄一下吧。以后也可以做參考。
原來有誤的代碼:
- StringBuilder strSql = new StringBuilder();
- strSql.Append("update news_Table set ");
- strSql.Append("NewsTitle=@NewsTitle,");
- strSql.Append("NewsContent=@NewsContent,");
- strSql.Append("NewsReporter=@NewsReporter");
- strSql.Append(" where NewsID=@NewsID ");
- OleDbParameter[] parameters = {
- new OleDbParameter("@NewsID", OleDbType.Integer,4),
- new OleDbParameter("@NewsTitle", OleDbType.VarChar),
- new OleDbParameter("@NewsContent", OleDbType.VarChar),
- new OleDbParameter("@NewsReporter", OleDbType.VarChar)};
- parameters[0].Value = model.NewsID;
- parameters[1].Value = model.NewsTitle;
- parameters[2].Value = model.NewsContent;
- parameters[3].Value = model.NewsReporter;
- return DbHelperOleDb.ExecuteSql(strSql.ToString(), parameters);
因為這個代碼是使用動軟代碼生成器自動生成的,所以我可以肯定代碼是無誤的,可是問題出在我修改了參數,自動生成的代碼里包含可以更新ID,我數據庫里的ID是自動增長的,所以不能更新,我也就直接刪除了ID,變成上面的錯誤代碼。就這樣,問題就出來啦,不管我如何調試,都無濟于事,始終不能更新到數據庫。
在琢磨很久之后,換成更加不同的方式來更新數據庫,也就是不使用@傳參數,直接使用++方式的代碼。
++方式的代碼:
- string strSql;
- strSql="update news_Table
- set NewsTitle='"+model.NewsTitle+"',NewsContent='"+model.NewsContent+"',NewsReporter='"+
- model.NewsReporter+"' where NewsID="+model.NewsID;
- return DbHelperOleDb.ExecuteSql(strSql);
使用這種方式可以很順利的更新數據庫里的數據。
這樣的結果讓我很抓狂。我不知道該怎么辦好,我想不通為什么傳參數的方式不行,但是直接寫的方式就可以。接著就是我瘋狂地在Google上搜索的這方面的資料,但是搜到這方面和我同樣的問題的日志不多。但是還是有解決這個問題的解決方案,那就是參數賦值順序和傳入的時候一致,下面貼出正確的代碼:
正確傳參數的代碼:
- StringBuilder strSql = new StringBuilder();
- strSql.Append("update news_Table set ");
- strSql.Append("NewsTitle=@NewsTitle,");
- strSql.Append("NewsContent=@NewsContent,");
- strSql.Append("NewsReporter=@NewsReporter");
- strSql.Append(" where NewsID=@NewsID ");
- OleDbParameter[] parameters = {
- new OleDbParameter("@NewsTitle", OleDbType.VarChar),
- new OleDbParameter("@NewsContent", OleDbType.VarChar),
- new OleDbParameter("@NewsReporter", OleDbType.VarChar),
- new OleDbParameter("@NewsID", OleDbType.Integer,4)};
- parameters[0].Value = model.NewsTitle;
- parameters[1].Value = model.NewsContent;
- parameters[2].Value = model.NewsReporter;
- parameters[3].Value = model.NewsID;
- 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
【編輯推薦】
- Access文件導入SQL Server錯誤代碼破解思路
- Access數據導入Mysql數據庫的實際操作
- 在ACCESS中調用后臺存儲過程
- 利用C#遠程存取Access數據庫
- SQL Server數據復制到的Access很簡單!