軟體介紹-AnyDesk-一個很好用的遠端協助工具

大家想到遠端協助工具第一個會想到誰?我想大概都是Teamviewer,因為它是第一個做到很多功能然後又在一開始提供很多人免費使用的遠端協助工具。

但我想介紹的是我上次去客戶公司它們的MIS公司介紹給我的一款遠端協助工具AnyDesk。

這款工具也有中文介面,但官方網站只有英文。它有支援各個平台,但我主要是Windows領域的工程師,就只寫Windows。

它在網路的流量上比Teamviewer省很多,所以操作的速度相對的快很多,然後同步化剪貼簿,所以傳檔案只要複製貼上就可以了。

然後它最棒的一個功能是它可以常駐在系統中,然後設定一個密碼就可以取代Remote Desktop。

當然設定密碼,就要小心密碼被別人知道別人可以在不注意的時候控制電腦。

它商用版本收費是用歐元計費的,一年合約要180EUR,終身授權750EUR,是Teamviewer價格的約1/4。

我現在還是在用免費版本,因為我不是MIS公司,不需要幫人管理Server,頂多偶而連到客戶Server看看。

大家可以用免費版本試看看,我是覺得比Teamviewer好用。

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

雖然現在有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>裡面就行了。這樣網頁就只能用點重新整理按鈕重整了。

Telerik教學-RadGrid的另類DataSource

其實Telerik的RadGrid讓我很喜歡用的原因是,它的DataSouce可以是一個Class,這相當方便在物件導向的使用上。

用法很簡單,先宣告一個Class,定義一些Private 變數,然後為這些變數建立一些Public Property,這就算在定義資料結構,如:

public class Columns{

Private int _Col1;
Private string _Col2;

public int Col1
{
get
{
return this._Col1;
}
set
{
this._Col1= value;
}
}

/*Col2一樣*/

}

然後這樣等同於有兩個Columns的Table的一個Row。接著就是做一個List<Columns> LC= new List<Columns>();的物件,這樣就等於可以有很多個Row的Table。

接著把資料填入LC,List物件是我最喜歡用的.NET物件,因為操作起來超級便利,速度又不會輸給Array太多。有時候排序只要一個list.Sort();就自動排好。

然後RadGrid1.DataSource=LC;RadGrid1.DataBind();

這樣等於是用一個List<T>的Class做DataSource,而可以額外寫一個Class是List<T>然後在那個Class裡面寫很多方法,這樣比起用DataTable更加的方便。

引用JavaScript外部檔案中文亂碼

今天在寫網站的時候遇到一個小問題,我把一些很長的JavaScript放到一個.js檔,外部引用它,如:

<script type=”text/javascript” src=”js/custom.js”></script>

結果原本沒問題的中文全部變成亂碼。

如果有人出現這個問題的話,解決方法就是在<script>tag裡增加它的編碼如Big5:

<script type=”text/javascript” src=”js/custom.js” charset=”big5″></script>

這樣亂碼的問題就解決了!

以後我盡量有些小問題就寫上來,也許可以幫到一些人。

C#教學-SqlDataAdapter及SqlCommandBuilder簡單用法

這篇主要要教怎樣用程式更改DataTable然後用讓SqlDataAdapter回存資料庫,這是很簡便的用法,我沒有要寫SqlDataAdapter的很多Command,只要寫一條Select Command其中包含Table的主索引就可以了。

首先一定是要定義一個SqlConnection:

SqlConnection connection = new SqlConnection(ConnectionString);

然後定義SqlDataAdapter、SqlCommandBuilder和DataTable:

SqlDataAdapter sda = new SqlDataAdapter(“select * from [a table] where blablabla“, connection);
DataTable dt=new DataTable();
SqlCommandBuilder scb = new SqlCommandBuilder(da);

這樣宣告完sda的另外三個command都會被自動產生,會產生的很不漂亮,但比手寫輕鬆,如果只是要做一點很簡單的批次性操作,這樣可以節省很多Coding時間。

最後要填入DataTable,然後操作,然後回存:

sda.Fill(dt);
/*Some operations*/
sda.Update(dt);

DataTable會去記錄哪個Row有修正,哪個Row是新增,哪個Row是刪除,所以直接呼叫一個Update,他就批次寫回資料庫,夠簡單吧!

最近年底,有幾個專案要結案,所以部落格的更新很慢,希望明年可以寫更多東西,謝謝觀看,下次再會!

 

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的計畫就終止了,改用別的解決方案。

希望能幫到需要的人。

程式碼下載

 

程式設計與電腦應用相關部落格完成

這個部落格是我部落格網路裡面,分工是程式設計與電腦應用相關的部落格,裡面的內容也會盡量合乎主題。

我想這個部落格應該會很多跟我工作相關的文章,因為我主要職業是.NET程式設計師,所以如果有哪些程式設計相關的資訊我也會放上來,可能會因此幫助到一些人。

電腦軟體應用的部分,我可能會列出一些我覺得不錯的軟體,及它們的教學,我想應該也會幫助到有需要的人。

關於我的介紹請到About Me裡面,我就不在貼文裡面多寫,這是我部落格網路第四個完成的,總共預計要有五個站,之後還會有一個音樂、影集與電影相關的部落格。

全部完成後,會在右方新增一個區塊是我的部落格網路的全部連結,把五個站全部連結起來。

總之以後請多指教!