在昨天下午就遇到了這個問題,但是調試一直都能成功,但是數據卻總是沒有更新。在網上搜索了下,這方面的東西還是挺少的,可能是因為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);