事務、預存程序——資料統一的守護神,預存程序守護神
隨著系統的增大,資料量的增多,很多時候要實現一個功能都會對資料庫中的很多表做操作,這樣的話就會面對一個問題——資料的統一和一致性操作,當我們要同時對多個表做有資料變動的操作時(即通常所說的增、刪、改操作),一旦出現意外情況或者是由於系統自身的問題或者是外界條件的變化導致某些操作沒有完成的話,就會出現資料不完整的情況,這樣的錯誤在系統中是絕對不允許出現的,那麼該怎樣才能很好地解決這個問題呢?接下來我將為大家介紹兩種很常見的解決方案事務和預存程序。
事務
如果涉及到的多個對錶的操作是寫在系統中的,那麼可以在開發的系統代碼中引入事務transaction,具體的操作自己也在之前的部落格機房收費系統中“事務”的應用中詳細介紹了,這裡就不再贅述了,但是還是有諸多瑕疵的。在三層的機房收費系統中自己是在DAL層加入了事務的引用,這樣會導致很多代碼的重複書寫,是一種很不好的習慣,所以,我們可以把這些方法都封裝起來,在BLL層調用的時候加入的事務的引用。
預存程序
還有一種辦法就是在資料庫中通過預存程序將你想要實現的操作都寫下來,那麼預存程序就會保證在你調用這個預存程序的時候全部執行預存程序中的sql語句,便實現了資料的統一操作,這樣便省去了自己諸多的顧慮,簡單、方便,讓辛辛苦苦的碼農們看到了希望!從中我們不難看出預存程序其實就是多條語句的集合體,但是正因為這一機制保證了各個語句的同時執行!
以下便是自己系統中用到的預存程序的執行個體,此預存程序中只是涉及到了對兩個表的刪除,拿來和大家分享!
在DAL層中對預存程序的調用,注意在引用時須保持和聲明部分的一致:
<span style="font-family:KaiTi_GB2312;font-size:18px;"> /// <summary> /// 刪除新聞(連通其下新聞評論一起刪除) /// </summary> /// <param name="id">新聞屬性</param> /// <returns></returns> public bool Delete(string id) { //TODO:刪除新聞(連通其下新聞評論一起刪除) bool flag = false; DataTable dt = new DataTable(); //定義datatable表 SqlParameter[] paras = new SqlParameter[] //定義參數 { new SqlParameter ("@id",id ) }; int res = sqlhelper.ExecuteNonAddDelUpd("news_Delete", CommandType.StoredProcedure); <span style="white-space:pre"></span>//引用預存程序 news_Delete if (res > 0) { flag = true; } return flag; }</span>
以上便是自己對資料統一性的一些認識,慢慢感受到了技術的掌握就是對新技術的瞭解,只有瞭解了新技術才可以保證自己做的系統的效能和功能,所以多多瞭解、多多實踐,努力消化,做一名優秀的工程師,做出好的系統!