2012年2月9日 星期四

C# : 使用 MySQL 的 Transaction

資料庫程式的運作上,我們常常會需要查出某筆資料取得某項資訊,然後依照此資訊修改另一筆資料,修改完再次取出資料經過一些程式判斷的結果,又再對某個資料表新增或刪除資料.... 一連串複雜的動作需要一次完成,通常這是一瞬間就能處理完成的事,所以不應該會中斷;但是當伺服器相當忙錄時,同時有多位使用者對資料庫要求這一系列的連續動作,那麼動作之間就很可能不是處理同一使用者的請求,取得的資料也可能不是預計的正確資料,所以新增、修改、刪除也可能會出錯,為了使這些工作能夠正確,我們可以使用 Transaction 來確保工作過程無誤,如果工作不順利而發生問題無法正確完成,則退回到工作開始前的狀態。

2012年2月8日 星期三

C# : 使用 DataSet 管理從 MySQL 查詢出來的資料

在【C# : 對 MySQL 查詢資料】一文中查詢多筆資料所使用到的 MySqlDataReader 會與資料庫建立持續性的連線,所以在查詢完資料後必須明確的 Close();有時候我們會使用多句不同的查詢語句查詢出資料並長時間交互使用資料內容,而且這些資料並不會馬上被更新或是不需要更新,那麼每次都重新查詢或是使這些 MySqlDataReader 都一直維持連線,好像怎麼樣都不是很理想,這時候我們就可以考慮使用 DataSet 建立資料塊。

C# : 使用 Prepare 處理 MySQL 資料的執行請求

在【C# : 對 MySQL 查詢資料】及【C# : 對 MySQL 新增、修改、刪除資料】二篇文章中說明的都是單次請求單次處理的做法,但如果同一句 MySQL 語句需要多次重複請求處理時,或是看起來很類似的多句 MySQL 語句,只有某些欄位值不同而已,要不斷的解析 MySQL 語句再處理,並不是好的做法,這種狀況我們就可以考慮使用 Prepare,不用每次都解析 MySQL 語句再做處理,只需要在 Prepare 時解析,之後只要不斷改變欄位值重新處理就好了。

C# : 使用 Parameters 處理 MySQL 語句

通常在程式中的 MySQL 語句,我們都是使用一般字串與變數直接組合而成,而這個變數值有時候是使用者從 client 端的表單傳送過來的,此時,如果某些防護未顧慮到,使用者輸入錯誤字元或是利用單引號、分號等特殊字元,將可輕易的中斷原本的 MySQL 語句,進而自行輸入其它語句來對資料庫做其它操作,這將可能發生執行期錯誤,甚至危害到系統。

2012年2月7日 星期二

C# : 對 MySQL 新增、修改、刪除資料


對 MySQL 新增、修改、刪除資料都是使用 MySqlCommand 的 ExecuteNonQuery() 執行後回傳影響筆數,主要是送出的 MySQL 不同的差別而已。

C# : 對 MySQL 查詢資料


可以使用 MySqlCommand 的 ExecuteScalar() 直接查詢單筆資料的單一欄位結果值,也可以使用 MySqlCommand 的 ExecuteReader() 取得多筆資料並獲得欄位數、欄位名稱、資料型態等訊息。

C# : 與 MySQL 連接


大部份擅長寫 PHP 的程式人員對 MySQL 應該都不陌生,因為在入門時就會學到如何用 Appserv 或 xampp 快速方便的架設好開發環境,而這個環境中使用的資料庫就是 MySQL,但是學 C# 時應該是會從 MSDN 入門,因為是微軟的東西,所以學 C# 的人通常應該是使用 MS SQL,那麼如果要連接 MySQL 的話會不會很麻煩呢?其實也很容易,只要到 MySQL 官網下載 Connector/Net (http://dev.mysql.com/downloads/connector/net/)安裝完成後,在專案中加入參考就可以使用了。

2012年2月6日 星期一

Unity 3D : 腳本化物件 ScriptableObject 設置資料成為 AssetBundle


不管是製作遊戲或應用軟體,多少都會有一些系統設定值,有些人可能會使用一個文件檔,依照定義好的格式,要求製作團隊全部的人都依照這個格式去設定這些值,可是因為文件檔的編寫太過方便和自由,如果解讀這個文件檔的程式漏掉某些檢查的地方,有可能因為人員的疏忽,弄錯了空白、換行、引號、逗號....等而造成解讀結果錯誤,而且要針對各種設定資料的文檔編寫解讀程式並轉換成可用的物件成員,有時候還蠻費工的,而且也不方便管理;另外,在【Unity 3D : 製作與載入 AssetBundle】提到將 Project view 中的資源打包成 AssetBundle,並於遊戲執行時視需要再從外部載入,那麼對於自定義的資料資源,又該如何運用在 AssetBundle 呢?此時就要使用到 ScriptableObject。

2012年2月3日 星期五

Unity 3D : 製作與載入 AssetBundle


通常我們在遊戲程式執行過程,並不希望一次將全部的資源都載入,而比較希望實際上有使用到的才載入,以免佔用多餘的記憶體,所以我們可能會儘量規劃好不同功能的場景,在需要時才載入場景並釋放掉前個場景中不需要的資源,或是將資源放在 Resource 資料夾中,在真正需要時才利用 Resources.Load() 把資源載入;這些都是不錯的管理方法,但是當我們遊戲中的資源相當多時,輸出的程式還是會相當龐大,而且如果是時常會更新內容資源的遊戲,也會因為龐大的資源而造成編譯輸出時要花相當多的時間;特別是手機或網頁遊戲,幾乎輸出最後的結果只是一個檔案而已,這個檔案如果很龐大,將可能造成下載或啟動遊戲的不方便;這時候我們可能就要考慮製作 AssetBundle。