程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Access使用參數方法更新數據庫的問題

Access使用參數方法更新數據庫的問題

編輯:C#入門知識

在昨天下午就遇到了這個問題,但是調試一直都能成功,但是數據卻總是沒有更新。在網上搜索了下,這方面的東西還是挺少的,可能是因為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:              
   7:  strSql.Append(" where NewsID=@NewsID ");
   8:  OleDbParameter[] parameters = {
   9:          new OleDbParameter("@NewsID", OleDbType.Integer,4),
  10:          new OleDbParameter("@NewsTitle", OleDbType.VarChar),
  11:          new OleDbParameter("@NewsContent", OleDbType.VarChar),
  12:          new OleDbParameter("@NewsReporter", OleDbType.VarChar)};
  13:  parameters[0].Value = model.NewsID;
  14:  parameters[1].Value = model.NewsTitle;
  15:  parameters[2].Value = model.NewsContent;
  16:  parameters[3].Value = model.NewsReporter;
  17:              
  18:  return DbHelperOleDb.ExecuteSql(strSql.ToString(), parameters);

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

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

++方式的代碼:

   1:  string strSql;
   2:  strSql="update news_Table set NewsTitle="+model.NewsTitle+",NewsContent="+model.NewsContent+",NewsReporter="+
   3:          model.NewsReporter+"  where NewsID="+model.NewsID;
   4:  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:   
   8:  OleDbParameter[] parameters = {
   9:          new OleDbParameter("@NewsTitle", OleDbType.VarChar),
  10:          new OleDbParameter("@NewsContent", OleDbType.VarChar),
  11:          new OleDbParameter("@NewsReporter", OleDbType.VarChar),
  12:          new OleDbParameter("@NewsID", OleDbType.Integer,4)};
  13:   
  14:  parameters[0].Value = model.NewsTitle;
  15:  parameters[1].Value = model.NewsContent;
  16:  parameters[2].Value = model.NewsReporter;
  17:  parameters[3].Value = model.NewsID;           
  18:   
  19:  return DbHelperOleDb.ExecuteSql(strSql.ToString(), parameters);