程式設計範例

網頁在平板或手機的瀏覽器阻止下拉重新整理

雖然現在有Xamarin這種可以用C#寫Native App的方法,但我有一個專案是以網頁來做訂貨單的輸入。

但就會遇到一個問題是,網頁要用瀏覽器開,瀏覽器滑到頂後再往下拉就會重新整理要怎麼辦?

我在Google找到了一段JavaScript,它的原理是在load事件觸發的時候執行增加兩個事件處理函數,那兩個事件一個是判斷是否網站已經到頂,一個是如果到頂將觸控的移動取消。

<script>
window.addEventListener(‘load’, function () {

var isWindowTop = false;
var lastTouchY = 0;

var touchStartHandler = function (e) {
if (e.touches.length !== 1) return;
lastTouchY = e.touches[0].clientY;
isWindowTop = (window.pageYOffset === 0);
};

var touchMoveHandler = function (e) {
var touchY = e.touches[0].clientY;
var touchYmove = touchY – lastTouchY;
lastTouchY = touchY;

if (isWindowTop) {
isWindowTop = false;
if (touchYmove > 0) {
e.preventDefault();
return;
}
}

};

document.addEventListener(‘touchstart’, touchStartHandler, false);
document.addEventListener(‘touchmove’, touchMoveHandler, false);

});
</script>

這個直接放在<Body>裡面就行了。這樣網頁就只能用點重新整理按鈕重整了。

C#教學-SqlConnection的Transaction功能

這篇要教C#怎樣使用SqlTransaction物件的方法,這在複雜一點的資料庫程式設計相當重要,C#也有一個物件能讓我們輕易的達到這樣的功能:

如果資料庫的操作不只一個SqlCommand,需要多個的時候,就有可能會發生其中一個錯誤,導致部分的有執行到,部分的沒執行到。這樣資料庫裡面的資料就會亂掉,有時會導致很嚴重的後果。

所以SqlTransaction的目的是在全部的SqlCommand都沒錯誤的執行完後,做一個Commit()動作全部送出,或在出錯的時候,做一個Rollback()的動作讓所有動作都沒發生。

基本上定義很簡單:

SqlConnection connection = new SqlConnection(ConnectionString);
SqlTransaction transaction;

然後要使用的時候:

connection.Open();
transaction = connection.BeginTransaction(“SampleTransaction”);

之後把每個要歸類到這個transaction的SqlCommand都設定:

SqlCommand cmd = new SqlCommand(“…”,connection);
cmd.Transaction = transaction;

這樣全部的SqlCommand執行完都沒發生錯誤,呼叫一個:

transaction.Commit();

有錯誤的話呼叫一個:

transaction.Rollback();

這樣就不會出現中途錯誤而只有部分影響資料庫的狀況,這我今天寫程式的時候突然遇到,因為偷懶沒寫transaction導致有一個Bug,所以特地發文上來。

程式設計範例-C#讀取RSS

這是最近客戶提到網站可能需要的功能,我在凌晨2~3點睡不著花了一小時做了一個範例。客戶的要求是讀取Pixnet的RSS。

說真的Pixnet的RSS的Content一解析出來,天啊!怎麼HTML碼這麼亂?我以為只有Word會產生這麼亂七八糟的HTML碼….

為了不要有什麼資訊安全的疑慮我直接把程式碼壓縮,裡面沒有編譯過的檔案。

寫得很簡單,只是單純運用SyndicationFeed這個物件,然後把讀取到的Feed用XmlReader存取。

只是要注意一下,直接調用SyndicationFeed的Content在Pixnet會是Null,所以多寫了一段代碼用StringBuilder讀取Content的部分。

不過因為Pixnet的Code太亂了,所以調用RSS的計畫就終止了,改用別的解決方案。

希望能幫到需要的人。

程式碼下載