2008年9月28日 星期日

Web Service 入門與觀念 / ASP.NET的五篇文章&範例

關於Web Service已經熱很久了。
在ASP.NET上面,透過VS 2005 / VS 2008 來開發更是簡單。

不要把 Web Service想得太難,他其實就是一個 自訂的Function(),只不過他可以在網路(Web)上分享給別人使用,
透過 Web Port 80,分享很容易,不用擔心防火牆或是其他設定問題..........
如果我寫了一個 Web Service,我上網公開,人人都可以連上來使用。那真是一個天下為公的美好願景!

直接看程式啦!直接動手..............

請看下列文章(我寫的):
Web Service入門 #1,透過VS 2005/2008 撰寫一個Web Service 2008/9/27 下午 11:16:21
Web Service入門 #2,呼叫現成的Web Service 給我的程式來用 2008/9/27 上午 10:46:34
Web Service入門 #3,[小改版] 呼叫現成的Web Service 給我的程式來用 2008/9/27 下午 04:23:22
Web Service入門 #4,搭配 ADO.NET DataReader的範例 2008/9/28 上午 12:06:23
Web Service入門 #5,搭配 SqlDataSource (DataSet) or 傳回值是一個DataSet 2008/9/28 下午 08:07:18

2008年9月9日 星期二

[勘誤表] ASP.NET專題實務(文魁出版,書號P8187)

本書有些錯字、漏字、或是排版印刷中出現的不明錯誤。 整理如下,並向讀者致歉(本表格將會持續整理、更新)

2008/八月份 天瓏書局排行榜前十名 (ASP.NET專題實務)

http://www.dotblogs.com.tw/mis2000lab/archive/2008/09/02/5268.aspx


謝謝各位讀者,小弟出版的新書,八月初才開始鋪貨。
新書上市-- ASP.NET專題實務(文魁出版)

重慶南路的天瓏書局,是國內少數的「電腦書」專業書局。 http://tlsj.tenlong.com.tw/WebModule/TopSale/topSaleDispAction.do?chi=1
2008八月份的銷售排行榜,「ASP.NET專題實務」這本書在收銀台的銷售排行榜,紙本公告是第十名。
網站上卻是第九(以2008/9/2為例)。


2008/8/18起數天,均是PChome電腦書的榜首,但很奇怪的是:
賣完後,PChome卻連續兩週不進貨(保持缺貨狀態)?
暢銷的貨,店家應該保持貨源才對啊?不知道PChome在想什麼?

第一批團購,我們採用愛心義賣的方式,扣除相關成本後,最後獲得的利潤捐給創世基金會。請看 謝謝各位支持,創世基金會的收據(來自第一批新書的愛心團購)


最後還是要廣告一下----


說來有趣,雖然書店賣得還好,但直接跟我購買的人似乎不多。小弟手邊還有些庫存,壓了不少現金
...................................................................................................................................................................................................................
新書上市-- ASP.NET專題實務(文魁出版 / P8187)。懇請支持,謝謝。
2008/八月份 天瓏書局排行榜前十名

先行編譯(PreCompilation)-- aspnet_compiler.exe,ASP.NET 2.0以後才適用

先行編譯(PreCompilation)-- aspnet_compiler.exe,ASP.NET 2.0以後才適用

ASP.NET 2.0以後,我們可以下指令(aspnet_compiler.exe)完成「先行編譯(PreCompilation)」。 當然,也可以在VS 2005/2008裡面,畫面右邊的方案總管,按下滑鼠右鍵,選擇「發行網站」

我想寫程式 之三部曲--- 「先確立志向」「兩招(三支程式)就可以出師」「簡單地設計自己的資料表(Table)」

這一系列有三篇文章,請看:

我想寫程式#1 之 「先確立志向」
我想寫程式#2 之 「兩招(三支程式)就可以出師」
我想寫程式#3 之 「簡單地設計自己的資料表(Table)」

DataSet與ObjectDataSource #1,簡單的小範例

DataSet與ObjectDataSource #1,簡單的小範例
自從ASP.NET 2.0開始(VS 2005),作法有些改變。我們必須加入一個資料集(DataSet),然後透過 ObjectDataSource控制項來使用它。 這一部份原本打算在書本裡提及,但書本上限600頁(我最後寫到840幾頁,實在塞不下去了),因為成為遺珠。 先把一些範例公布在我的Blog上面,作為補償。

修改VS 2005/VS 2008「動態通訊埠」這個擾人的問題

VS 2005 or VS 2008在畫面中就能修改「動態通訊埠」這個擾人的問題。
與大家分享一下,順便留個記錄,以免哪天自己也忘了。
http://www.dotblogs.com.tw/mis2000lab/archive/2008/09/08/5318.aspx

2008年8月15日 星期五

[廣告&團購] 新書上市-- ASP.NET專題實務(文魁出版)

我跟出版社談好了優惠條件,希望能夠以便宜的售價,來推廣這些書。


目前有三種優惠方案,請把握機會.....

[入門]VS 2008 + LINQ-to-SQL,不用寫程式,一次搞定。

不用寫程式,VS 2008拉過來、拉過去,就完成一個功能強大的網頁程式。

範例: GridView + LINQ,完成資料呈現、分頁、編輯(更新)、刪除、排序等等功能。

寫程式有這麼難嗎?~真的不會啦

[入門]以初學者來看,ASP.NET的GridView可以學到什麼?

GridView也是目前大多數ASP.NET書籍第一介紹的「大型、全能控制項」,
GridView能玩到的功能很多,由淺入深,有各種玩法。

重點不是在「強調GridView的英名神武」,而是在GridView的學習歷程中,我們學到的東西,都可以延續到其他控制項來使用。

這才是書籍作者偏好 「優先推薦GridView」的理由吧。 以初學者為例,GridView的學習歷程,可以包含......

[給初學者的話] IT世界裡面,沒有一本搞定的「初學者聖經」

的確有許多電腦書,被大家推崇,這些書被認為是「聖經」等級,不看不行。
但是這種「聖經」,是指:書本寫得好、架構嚴謹、理論正確,看了以後茅塞頓開,扭轉不少錯誤的觀念。
絕對!絕對沒有哪一本「聖經」等級的電腦書,敢跟你保證「買了這一本,永遠不用看其他書籍」啦~

2008年7月16日 星期三

該學ASP或是ASP.NET?....從「驚見一本ASP新書上市」說起

該學ASP或是ASP.NET?....從「驚見一本ASP新書上市」說起

我的ASP.NET學習地圖(給初學者、入門參考),如何變成Web程式設計師?

我的ASP.NET學習地圖(給初學者、入門參考),如何變成Web程式設計師?

VMware,讓你的電腦虛擬化。同時安裝多個作業系統。

VMware,讓你的電腦虛擬化。同時安裝多個作業系統。

[轉貼]IT虛擬化(資料來源:ithome)

單一檔案(Inline Code)與後置程式碼(Code Behind)

單一檔案(Inline Code)與後置程式碼(Code Behind)

[微軟文件]保護 ASP.NET 網站

[微軟文件]保護 ASP.NET 網站

宅男行銷學?正妹產品風?

宅男行銷學?正妹產品風?

常用的 HttpSessionState屬性

常用的 HttpSessionState屬性

如何在移除並重新安裝 IIS 之後,修復 .NET Framework對應(Mapping)

如何在移除並重新安裝 IIS 之後,修復 .NET Framework對應(Mapping)

[錯誤訊息]Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool.

[錯誤訊息]Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool.

[轉貼]MS SQL Server的T-SQL指令、Stored Procedure與Trigger

[轉貼]MS SQL Server的T-SQL指令、Stored Procedure與Trigger

不同語系的轉碼、編碼 / HttpUtility.UrlEncode,Server.UrlEncode兩者差異

[自己的經驗談] 油價高漲,省油DIY,省油秘訣

開車想要省油,其實要看自己的開車習慣。

關於省油的問題,我親身經驗不錯,請您參考。

不需要安裝什麼省油設備啦!那些錢省下來加油(當成油錢),還比較實際
想要省油,沒有秘訣啦。參考一下我的方法:


[自己的經驗談] 油價高漲,省油DIY,省油秘訣

2008年6月2日 星期一

ASP.NET的免費資源

ASP.NET的免費資源

[免費下載]Visual Studio 2008(90天試用版)

[免費下載]Visual Studio 2008 and .NET 3.5 Training Kit

[免費下載]ASP.NET MVC

跨網頁張貼(Cross-Page Posting),微軟稱為「跨網頁公布」 #2

跨網頁張貼(Cross-Page Posting),微軟稱為「跨網頁公布」 #2

上一篇文章,介紹過第一種方法(跨網頁張貼(Cross-Page Posting),微軟稱為「跨網頁公布」 #1)。
目前要介紹的是第二種方法:

以下是即將出版的新書內容:
題目跟剛才一模一樣。只是解法不同。
========================================================
假設我們有一個網頁程式,要輸入日期。
另外一個網頁程式,會有日曆控制項。
點選後,日期會自動傳回去。
(抱歉,有幾張圖片來解釋可能比較清楚。But......大家忍耐一下,這東西不難。)
========================================================
以下是即將出版的新書內容:
作法如下:
而本範例(3.aspx)就得透過 Public屬性來完成相同的功能。簡單的說,3.aspx提供了一個「公開的」日曆控制項「屬性」,可以讓別的網頁來讀取。這樣一來,也可以完成跨網頁張貼(Cross-Page Posting)。
3.aspx原始網頁的HTML畫面設定,跟上一節的 1.aspx完全一樣。在此不贅述。但是 3.aspx的後置程式碼,有很大的變化,請注意:

Partial Class test_ADO_NET_3_get
Inherits System.Web.UI.Page

'=====透過 Publlic屬性,來作 Cross-Page Posting。=====
‘ 別的網頁才能讀取這個公開的資訊
Public ReadOnly Property my_Calendar() As Calendar
‘-- 註解:ReadOnly指出:這個公開的屬性,只能被讀取而已。這樣較安全!
Get
Return Calendar1
End Get
End Property


Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Text = Calendar1.SelectedDate.Date.ToShortDateString
'--把選取的日期,以「短日期格式」來呈現。
End Sub
End Class

這個範例,比較特別的是第二支程式(4.aspx,目的地網頁),請注意!HTML畫面原始檔多了一行設定「<%@ PreviousPageType VirtualPath="3.aspx" %>」,用來讀取 “上一個網頁” 的公開資訊。

設定「<%@ PreviousPageType VirtualPath="3.aspx" %>」這一行,除了鎖定「上一個網頁」的檔名與位置,也限制了接收資訊的網頁(4.aspx,目的地網頁)不能任意使用其他網頁的資訊,全都是為了安全起見。4.aspx的後置程式碼如下:


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Label1.Text = PreviousPage.my_Calendar.SelectedDate.ToString
End Sub

本節範例的執行結果,跟上一節完全相同,但卻有兩種不同作法




.............................................................................................
微軟官方文件有更詳細的說明(以下是中文的文件),微軟稱「Cross-Page Posting」為「跨網頁公布」
http://msdn.microsoft.com/zh-tw/library/ms178139.aspx

跨網頁張貼(Cross-Page Posting),微軟稱為「跨網頁公布」 #1

跨網頁張貼(Cross-Page Posting),微軟稱為「跨網頁公布」 #1

跨網頁張貼(Cross-Page Posting),簡單的說,就是「網頁A」要把資料傳給「網頁B」。
以前在ASP時代,我們可以用隱藏欄位,例如: ,或是 Session(工作階段)來處理。
而ASP.NET 2.0開始,微軟有新的方法提供給大家。
以下是即將出版的新書內容:
========================================================
假設我們有一個網頁程式,要輸入日期。
另外一個網頁程式,會有日曆控制項。
點選後,日期會自動傳回去。
(抱歉,有幾張圖片來解釋可能比較清楚。But......大家忍耐一下,這東西不難。)
========================================================

作法如下:
程式 1.aspx的按鈕(Button2)控制項,「PostBackURL」屬性要設定第二支程式的檔名(2.aspx)或URL。

Text="Button2_日期出現在下一頁(2.aspx)" />

2.aspx(目的地網頁),畫面上只有一個Label控制項而已。
因為要承接上一個網頁傳來的資料,所以 2.aspx的後置程式碼很重要!寫法如下:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim my_Calendar As Calendar
my_Calendar = CType(PreviousPage.FindControl("calendar1"), Calendar)
‘-- 註解: CType(A, B)是把 A強制轉換成 B的型態。
PreviousPage.FinControls(“控制項的ID”),是指:承接「上一個網頁」傳來的「控制項」。

Label1.Text = my_Calendar.SelectedDate.ToString
End Sub

========================================================
以下是即將出版的新書內容:
上面這種作法,有何好處?我用以前ASP時代的老方法,也能完成相同的功能啊。
恩恩....您說得對。但在安全上,有很大的改進。
當使用者不是經過原始網頁(1.aspx),而直接進入第二支目的地網頁(2.aspx)時,PreviousPage屬性為 Null參照 (即 Visual Basic語法中的 Nothing)。
如此可以避免有人不照流程來使用此功能,直接進入第二支程式的下場,就是Null(空空如也)。


微軟官方文件有更詳細的說明(以下是中文的文件),微軟稱「Cross-Page Posting」為「跨網頁公布」
http://msdn.microsoft.com/zh-tw/library/ms178139.aspx

另外一種作法,我們下次再談.............
請看下一篇文章(介紹第二種方法)http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/26/4123.aspx

2008年5月21日 星期三

AJAX與ListView的怪現象? --樣版內,控制項ID重複的問題

AJAX與ListView的怪現象? --樣版內,控制項ID重複的問題

這個問題也是我在MSDN論壇回答過的。http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3125960&SiteID=14

Q :ListView裡面的各種樣版,以 ItemTemplate 與 AlternatingItemTemplate這兩個樣版最類似。
如果加上AJAX功能,在這兩個樣版內部,各自加上 UpdatePanel。
很奇怪的是----執行時,會出現錯誤訊息。說 [控制項ID重複?]
取消AJAX的UpdatePanel之後,又好了?真的很奇怪!

重新看了 ListView與SqlDataSource,自動幫我產生的樣版內容(HTML碼)。
沒錯。,這兩個樣版的內容一模一樣啊
不光如此,ListView的各種樣版,裡面各種的 TextBox,ID都是一樣的。
為何不會有錯?但加上AJAX的UpdatePanel就會出錯呢?
...................................................................................................................................

A : 這問題很有趣,所以我也自己測試了一下。
手動去修改 ListView裡面,每個樣版內的 [控制項ID],不要重複就好了。我試過,可以正常執行
我個人的認知如下,未必正確。
傳統POSTBACK的作法,一次只會啟動一個樣版,
所以 ListView各種樣版底下的控制項ID,就算重複也無所謂。
但改成AJAX之後,這時候,每一個控制項ID都必須獨一無二,
不然的話,要怎麼知道是哪一個控制項啟動了非同步的POSTBACK?
我覺得這說法,好像說得通


以上問答,是我在MSDN回答過的問題。
http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3125960&SiteID=14
今天又看見它上了最常查詢問題的排行榜。
所以收錄回自己的BLOG裡面

File 與 Log #2----訪客計數器(用.txt檔案來記錄)

File 與 Log #2----訪客計數器(用.txt檔案來記錄)


以下是即將發表的新書內容:
網站的訪客計數器,也可以用檔案的方式來撰寫。這支程式(Counter.aspx)很簡單也很短,就算您看不懂程式碼,直接 Copy過去用也可以執行。而且執行的結果是以圖片的方式來呈現數字


數字圖片,放在本章範例的 image目錄底下。例如:1的圖片,就名為1lcdb0,gif。2的圖片,就名為2lcdb0,gif……以此類推。

01 Imports ...System.IO
02
03
04
05 Partial Class _Book_My_Files_Counter
06
07 Inherits System.Web.UI.Page
08
09
10
11 Protected Sub Page_Load() Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
12
13 '====讀取檔案 (務必修改這個檔案的權限,需要「寫入」的權限)====
14
15 Dim sr As New StreamReader(Server.MapPath("counter.txt"))
16
17
18
19 '--把檔案內, 原本的訪客人數[加一]
20
21 Dim visitors As String = sr.ReadLine()
22
23 visitors = CInt(visitors) + 1
24
25
26
27 '--把訪客人數(數字) 轉換成 [圖片]展示在畫面上
28
29 Dim Length As Integer = Len(visitors) '--計算訪客人數的[字串長度]
30
31 Dim strURL As String = ""
32
33
34
35 While Length >= 1
36
37 '--訪客人數的每一位數字,都用圖片來呈現。
38
39 strURL = "" & strURL
40
41 Length = Length - 1
42
43 End While
44
45 sr.Close()
46 sr.Dispose()
47
48
49
50 '====寫入檔案,紀錄最新的訪客人數==================
51
52 Dim sw As New StreamWriter(Server.MapPath("counter.txt"))
53
54 sw.WriteLine(visitors) '--找不到檔案也不會出現錯誤訊息,而且會自動新增一個檔案。
55
56 sw.Close()
57 sw.Dispose()
58
59
60 Label1.Text = strURL
61
62 End Sub
63
64 End Class



上面的程式中,比較困難的是 While迴圈的部份。假設訪客人數(visitors)為 999998,我們必須先確定這字串的長度為6(Len(visitors))。然後一個一個地把數字,用圖片的HTML碼()來取代。
我們用一個文字檔來進行記錄,把訪客的參觀數字,記錄在這個檔案(counter.txt)裡面。重點是:務必把這個檔案的權限,設定為「可寫入」。這樣才能每次累計加一,記錄訪客人數。

HTML用來展示圖片的標籤,寫法是:
本範例counter.aspx的後置程式碼很簡單,裡面只作了兩件事而已。第一是讀取counter.txt檔案,取出原本的訪客人數。第二,是把人數加一,然後以圖片方式展現在畫面上,再把更新後的數字寫入檔案。

File 與 Log----ASP.NET的檔案與I/O Stream

File 與 Log----ASP.NET的檔案與I/O Stream
舉例來說,尚未上線的系統、或是有些功能繁雜的程式要撰寫。我們就可以利用檔案的功能來做紀錄。一邊測試一邊記錄這些程式在各階段的運作狀況,每個階段成功與否都可以直接寫入文字檔裡面,不需要跟資料庫搶資源、搶連線。畢竟小檔案I/O的速度,一般來說都快過資料庫。
以前我做過B2B的案子,用Rosettanet XML來傳遞資料(關於Rosettanet,請看中文網站的說明,http://www.rosettanettaiwan.org.tw/)。當時用的技術是 VB 6.0 + ASP + MS BizTalk Server + MS SQL Server 2000。
依照實際的狀況,我們會同時用「檔案」與「資料庫」來記錄這些流程。底下的五大步驟,前三項都會用文字檔做紀錄,因為這些小資料是自己Debug(除錯)用的,往往是系統出問題才會去察看,也不太有保留的價值,所以我們採用文字檔來記錄。
1. 程式定時啟動(例如:每五分鐘啟動一次),並開始記錄處理流程。2. 從資料庫搜尋資料。符合條件的紀錄就撈出來,組合成XML檔案。(執行時間與XML檔案都會存成文字檔,存在專有的目錄底下)3. 將XML檔案,轉換成 Rosettanet格式。(執行時間與Rosettanet XML檔案都會存檔,放在專有的目錄底下)4. 交給 Server準備發送。此時,就會用資料表來記錄時間與相關資料了。5. 傳送給對方的Server。對方收到後,我們也會把時間記錄在資料表裡面。註解:後面兩個流程要用資料表來做紀錄,是為了給客戶與主管查驗,日後也能統計與分析我們這套B2B系統的發送成功率等等。
除了大型的系統、複雜的程序需要做Log紀錄檔之外,網站常用的「訪客計數器」,也可以用檔案的方式來控管。可見存取檔案的用法,真的很多樣化。

以下是即將發表的新書內容:


Q:每一天都用一個檔案,用來記錄當天每支程式內部的執行狀況。
以下是相關的規範:

1. 檔案統一放在 C:\MIS2000Lab_ASP.NET_Log目錄底下。
2. 每一天都用一個單獨的子目錄,子目錄名稱就是當天日期。
3. 檔名必須是以當天日期為名,副檔名是.log,例如:20081231.log。
4. 檔案內每一段訊息,都要記錄完整的日期與時間(年/月/日/時/分/秒)。
每段訊息各自獨立一行,格式如下:
[2008/04/01 14:00:33] Message: 錯誤訊息XXXYYY
5. 檔案內的文字,採用 Big5正體中文來編碼。


記錄檔案的後置程式碼如下,其實不難,大部分都學過了。程式碼請看這裡----http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/19/4034.aspx

推薦好書----深入淺出C# (歐萊禮,O'Relly)。很適合初學者與新鮮人~

推薦好書----深入淺出C# (歐萊禮,O'Relly)。很適合初學者與新鮮人~


市面上有些電腦書寫的很不錯。
英文原文書當然沒話講,或許是語言的關係,他們寫技術文件比較單刀直入,一目了然。

後來我發現國內的出版社,也引進一些「日文翻譯書」。日本人也是好樣的!
他們不說廢話,書裡面都是很實用的範例。也讓我印象很深刻。
例如:入門SQL(博碩)、ASP.NET語法範例字典 / SQL語法範例字典(旗標)。這幾本日文翻譯書都超讚!
很務實,學到的東西都很實用!

以前有一陣子,英文書有一系列的 XXX for Dummy (http://www.amazon.com/ASP-NET-Dummies-Bill-Hatfield/dp/0764508660)。
國內也出版過翻譯本,這些書籍都很淺顯,初學者很能接受。
有一家出版社,名為PC User,他們出版的書也是走向這類型,淺顯易懂。

昨天去逛書店,看見「深入淺出C# (歐萊禮,O'Relly)」http://www.oreilly.com.tw/product2_others.php?id=a230
這一系列的書(名為 Head First XXX),也是很淺顯。
最特別的是:這系列的書本,裡面圖片比文字還多!排版方式也很[動感]!
缺點就是「貴!」,中譯本比一般國產電腦書還貴兩百元左右。

但內容很有趣,就如同書裡講的「很適合程式設計的新鮮人、初學者」。
隨手翻翻,就看完一大半。但是.....這種搞笑的語句、大量圖片與插畫.....國內出版社的編輯人員 [似乎] 不太能接受
也可能書市慘澹,目前出版社主打學校教科書市場。教科書嘛!不能太輕鬆啦~要嚴肅一點點。

這一系列的書,(歐萊禮,O'Relly)將他中文化,出版好多本。PMP、SQL等等,內容包羅萬象。
都是鎖定「初學者」市場的。.............我看完之後,發覺--
除非我請漫畫家來合作,推出一本「看漫畫學ASP.NET」,不然的話很難贏過它了
(這不是開玩笑,日本有很多這種書籍,例如:看漫畫學XXX,都是電腦書喔!)

但是,不要小看這一本入門書喔!
該講都講了。包含:物件導向、型別&參考、封裝、繼承、介面與抽象類別、列舉&群集等等。
內容豐富得很~

很多初學者,買書就看「書店的排行榜」、「看人家推薦什麼」、「買最厚的一本」.....
說穿了,是買心安的。就跟初一十五去廟裡拜拜一樣(我當年也是如此)
慢慢的,我才發展出一套方法論,能夠「挑選適合自己程度的書」。
適合自己的書,未必適合別人。未必是暢銷書。
只要對自己有益!就是一本適合自己的好書!(意思雷同於:管他黑貓白貓,會抓老鼠就是好貓!)

.........................................................................................................................
(謎之聲:咦?你玩ASP.NET一段時間了,自己也出書,怎麼還買這樣的入門書來看呢?)
就如同我說過的(請看下面,我以前的PO文)----溫故知新。書本永遠看不完。
一本書,只要有一個範例、一章,讓我有感覺。那麼這五六百元的書錢,就沒有浪費!
~~~~寫程式所需要的參考書,沒有「一本就能搞定」的聖經!~~~~多多益善,開卷有益。

看見了一本有趣的好書,也跟大家分享一下 (^_^)
.........................................................................................................................
相關文章----如何挑一本好書,學習ASP.NET。個人觀點,非戰文。

[Info]Enterprise Library 4.0發佈了

今天一早就看見 LOLOTA前輩的文章----[Info]Enterprise Library 4.0發佈了
這東西是什麼啊?
也就是以前講的DAAB(全名Data Access Application Block ),
現在改名為 Patterns & Practices(或是稱為p&p),一般都稱為 Enterprise Library (EntLib)
以前在MSDN論壇也有討論過,請看這篇文章-- http://forums.microsoft.com/msdn-cht/ShowPost.aspx?PostID=2703042&SiteID=14

微軟MSDN裡面,有一個專區---- http://msdn.microsoft.com/zh-tw/practices/default(en-us).aspx

下載與說明:http://www.codeplex.com/entlib
沒記錯的話,他們是開放原始碼的,有興趣的人可以參考或是改寫。
安裝完成,就會在目錄底下看見一個原始碼(SourceCode)的目錄

如果您接手以前的程式,發現裡面常常有一個 SqlHelper()之類的東西。
沒錯,SqlHelper就是前身,您可以參考這篇中文文件(年代有點久):Microsoft Application Blocks for .NET

我們可以從這些地方,更瞭解 Enterprise Library(p&p)。
Get Started With p&p
What is p&p?
Who We Are and What We Do
Explore the p&p Catalog

小弟在 3.1版的時候,稍稍玩過(試了一下)Enterprise Library ,那時是搭配 .NET 2.0與VS 2005的。那時共有八大分類,「資料存取」僅僅是其中一類。
寫了一些ADO.NET的程式(DataReader與DataSet),跟Enterprise Library提供的比較一下
相同程式跑一萬次,來記錄執行時間。似乎手工自己寫ADO.NET比較快,平均時間都快了一秒。

有兩個範例要跟大家分享,因為這個BLOG張貼程式很醜,請您看這裡----http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/21/4091.aspx

2008年5月19日 星期一

JavaScript + ASP.NET

JavaScript + ASP.NET

1. 以動態方式將用戶端指令碼(JavaScript)加入至 ASP.NET Web 網頁
以下都是 Page.ClientScriptManager 類別
資料來源:微軟 MSDN 官方網站 http://msdn2.microsoft.com/zh-tw/library/ms178207(VS.80).aspx
方 法
說 明
RegisterClientScriptBlock
將指令碼區塊加入頁面頂端。您可以字串形式建立指令碼,然後將它傳遞給加入網頁的方法。您可以使用這個方法將任何指令碼插入網頁。請注意,在完成所有項目之前指令碼可能就會呈現至網頁。因此您可能無法從指令碼參考網頁上所有的項目。
RegisterClientScriptInclude
這個方法類似 RegisterClientScriptBlock 方法,但是會加入參考外部 .js 檔的指令碼區塊。在以動態方式加入任何其他指令碼之前就會加入這個包含檔。因此您可能無法參考網頁上的某些項目。
RegisterStartupScript
將指令碼區塊加入當網頁完成載入(註:把JavaScript放在ASP.NET網頁最下方),但是在引發網頁的 onload( )事件之前,就會執行的網頁。這個指令碼通常不會建立為事件處理常式或函式。其通常只包含想要執行一次的陳述式。
RegisterOnSubmitStatement
加入執行以回應網頁 onsubmit 事件的指令碼。在送出網頁之前就會執行指令碼,並且讓您有機會取消送出動作。

 
2. 將用戶端指令碼事件 加入至 ASP.NET Web 伺服器控制項
以下的範例,是用來區分兩種不同的Click方式。一種是Server端(下面綠色字體),另一種是Client端(下面紅色字體,以JavaScript的方式。)
資料來源:微軟官方MSDN網站 / http://msdn2.microsoft.com/zh-tw/library/7ytf5t7k(VS.80).aspx

<%@ Page Language="VB" %>

<html>


<script
runat="server">

    Sub Button1_Click(ByVal sender As Object,
ByVal e As System.EventArgs)

        Label1.Text = "Server click handler
called."

    End Sub

</script>


<body>

  <form id="form1" runat="server">

    <asp:Button ID="Button1" Runat="server" 
OnClick="Button1_Click"


          OnClientClick="return
confirm('Ready to submit.')
"



          Text="Test Client Click" />

    <br />


    <asp:Label ID="Label1"
Runat="server" text="" />

  </form>

</body>

</html>


FileUpload控制項「批次上傳 / 多檔案同時上傳」的範例

FileUpload控制項「批次上傳 / 多檔案同時上傳」的範例

以下是即將發表的新書內容:
FileUpload控制項真的簡單好用,不使用它來作批次上傳,卻要改用別的方法,實在不聰明。要用就一次用到底,
公開FileUpload控制項「批次上傳」的範例,千萬不能錯過。

首先,進行HTML畫面的設計,根據上圖,在畫面上使用多個 FileUpload控制項,然後搭配一個按鈕控制項即可。
除此以外,範例 8_Multi_Upload.aspx還加入了「避免上傳同名檔案」的功能(本範例共有三種子功能,其中沿用本章之前介紹的兩個範例),可以說是把本章的各種範例作一個大融合。以下是後置程式碼:

以下是即將發表的新書內容:

01
02
03 Protected Sub Button1_Click() Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
04 '--註解:網站上的目錄路徑。所以不寫磁碟名稱(不寫 “實體”路徑)。
05 Dim saveDir As String = "\[Book]FileUpload\Uploads\"
06 Dim appPath As String = Request.PhysicalApplicationPath
07 Dim tempfileName As String = Nothing
08 Dim myLabel As New System.Text.StringBuilder
09
10 For i = 1 To (Request.Files.Count - 1)
11
12 Dim myFL As New FileUpload
13 myFL = CType(Page.FindControl("FileUpload" & i), FileUpload)
14
15 If (myFL.HasFile) Then
16 Dim fileName As String = myFL.FileName
17 Dim pathToCheck As String = appPath & saveDir & fileName
18 '====用來處理上傳檔案的「檔名重複」問題 =================(Start)
19 If (System.IO.File.Exists(pathToCheck)) Then
20 Dim my_counter As Integer = 2
21 While (System.IO.File.Exists(pathToCheck))
22 ' --檔名相同的話,目前上傳的檔名(改成 tempfileName),前面會用數字來代替。
23 tempfileName = my_counter.ToString() & "_" & fileName
24 pathToCheck = appPath & saveDir & tempfileName
25 my_counter = my_counter + 1
26 End While
27 fileName = tempfileName
28 Label1.Text = "抱歉,您上傳的檔名發生衝突,修改如下" & "
" & fileName
29 End If
30
31 Dim savePath As String = appPath & saveDir & fileName
32 myFL.SaveAs(savePath) ' –存檔。完成檔案上傳的動作。
33 '==============================================(End)
34 myLabel.Append("
檔名---- " & fileName)
35 End If
36 Next
37
38 Label1.Text = "上傳成功
" & myLabel.ToString
39 End Sub


補充----
網路上找到的相關文章:让UpdatePanel支持上传文件 http://www.cnblogs.com/JeffreyZhao/archive/2008/05/04/build-component-to-upload-file-in-updatepanel.html

四川大地震,願大家都平安,Peace!

四川大地震,願大家都平安,Peace!

網路上吵得很厲害,要「人道」、要「以直報怨」、要XXXY等等.....都不如下面這位朋友的一句話:

迴響來自: Sampkao [訪問者]今日的種種敵意,都是過去五十、一百年來的積累;
未來的五十、一百年會如何,就要看我們今日怎麼去做。全文連結 2008-05-14 @ 19:53
提供三篇好文章,讓自己反思。

多台Web Server(IIS)作 Load Balance,session怎麼處理?

多台Web Server(IIS)作 Load Balance,session怎麼處理?

原文是 MSDN論壇的一篇文章,大家有興趣可以去看看。http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3346245&SiteID=14&mode=1


以下是我的回答:
這期的MSDN雜誌有提到喔,以下只是那篇文章的摘錄(原文很長。是中文的,放心去看吧)
http://msdn.microsoft.com/zh-tw/magazine/cc500561.aspx
如果您有一部以上的 Web 伺服器,那麼應該要把工作階段(Session)作業資訊儲存在哪裡?
可用的一個方法,是將資訊儲存在 Web 伺服器上,然後使用相似性。基本上,這代表來自某一位使用者的第一個要求會進行負載平衡,之後,所有來自該使用者/工作階段的要求,就都會傳送到與第一個要求相同的伺服器上。這是一項簡單的方法,每一種負載平衡解決方案都支援這樣的做法,而且在某些案例中是很合理的做法。
然而,長期而言,相似性會造成慘痛的問題。保持工作階段資料在同處理序 (In-Process) 或許是較快的方法,但是如果 ASP.NET 背景工作處理序進行回收,則這些工作階段就會中斷。背景工作處理序會進行回收的原因有很多。在高負載的情況下,IIS 可能會回收 ASP.NET 的背景工作處理序,因為它可能會認為該背景工作處理序已經卡住。事實上,根據預設,IIS 6.0 每 23 個小時就會回收一次背景工作處理序。您可以調整這個值,但是無論如何,您的使用者還是可能面臨工作階段資料在處理中遺失的風險。當網站的規模較小時,這並不會造成太大的問題,但隨著網站規模的擴充以及流量的增加,這將會成為嚴重的問題。此外還會有其他的問題。

如果您是透過 IP 位址進行負載平衡,其中有一部伺服器將會因為大量的 Megaproxy (像 AOL) 而無法負荷服務的負載。再則,若要在伺服器上更新您的應用程式版本,將會變得更困難;您必須等候使用者完成網站上的作業,或強制中斷使用者的工作階段 (而惹毛這些使用者)。如此一來,網站的可靠性就會遭受質疑:伺服器服務的中斷,會導致許多工作階段的中斷。

消除相似性是分散化策略的關鍵目標。這需要使工作階段狀態資料跨處理序,亦即要為了提升擴充性而犧牲一些效能。當您使工作階段跨處理序時,工作階段資料(Session)就會記錄在所有 Web 伺服器均可存取的位置,這可以是在 SQL Server® 上(請看「瓶水相逢」網友給的建議:HOW TO:設定 SQL Server 以儲存 ASP.NET 工作階段狀態)或是在 ASP.NET 狀態伺服器上。這可以在 web.config 中設定。

若要支援跨處理序工作階段,還需要撰寫一些程式碼。任何將儲存在 Session 物件中的類別,都需要以 Serializable 屬性標記。這表示類別中的所有資料都必須為可序列化,或標記為 NonSerialized,才能被忽略。如果您沒有如此標記類別,當序列化程式執行而要將您的工作階段資料儲存為跨處理序時,就會發生錯誤。

最後,移動工作階段成為跨處理序的方法,可以讓您知道工作階段物件中是否有太多資料,因為如此一來,您就可以察覺到每一個網頁要求在網路上來回傳送大量資料的負荷 (一次在網頁開端做為擷取,一次在網頁尾端做為傳回)。


或是看看下面這篇文章,孫三才老師講的JSP Web Farm,也有很高的參考價值。
http://www.javaworld.com.tw/jute/post/view?bid=30&id=62079&sty=1&tpg=3&age=0

AJAX與ListView的怪現象? --樣版內,控制項ID重複的問題

AJAX與ListView的怪現象? --樣版內,控制項ID重複的問題

這個問題也是我在MSDN論壇回答過的。http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3125960&SiteID=14

Q :ListView裡面的各種樣版,以 ItemTemplate 與 AlternatingItemTemplate這兩個樣版最類似。
如果加上AJAX功能,在這兩個樣版內部,各自加上 UpdatePanel。
很奇怪的是----執行時,會出現錯誤訊息。說 [控制項ID重複?]
取消AJAX的UpdatePanel之後,又好了?真的很奇怪!

重新看了 ListView與SqlDataSource,自動幫我產生的樣版內容(HTML碼)。
沒錯。,這兩個樣版的內容一模一樣啊
不光如此,ListView的各種樣版,裡面各種的 TextBox,ID都是一樣的。
為何不會有錯?但加上AJAX的UpdatePanel就會出錯呢?
...................................................................................................................................

A : 這問題很有趣,所以我也自己測試了一下。
手動去修改 ListView裡面,每個樣版內的 [控制項ID],不要重複就好了。我試過,可以正常執行
我個人的認知如下,未必正確。
傳統POSTBACK的作法,一次只會啟動一個樣版,
所以 ListView各種樣版底下的控制項ID,就算重複也無所謂。
但改成AJAX之後,這時候,每一個控制項ID都必須獨一無二,
不然的話,要怎麼知道是哪一個控制項啟動了非同步的POSTBACK?
我覺得這說法,好像說得通


以上問答,是我在MSDN回答過的問題。http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3125960&SiteID=14
今天又看見它上了最常查詢問題的排行榜。
所以收錄回自己的BLOG裡面

2008年5月12日 星期一

如何挑一本好書,學習ASP.NET。個人觀點,非戰文。

如何挑一本好書,學習ASP.NET。個人觀點,非戰文。


不瞞您說,小弟也出過幾本書(電腦書),以我的身份來說這些事,其實很不客觀。

大家看看就好,不要開戰吵起來。......反正 Blog就是給大家各自表述的園地

以ASP.NET為例,什麼樣的電腦書適合「初學者」來閱讀呢?

-------------------------------------------------------------------------------------------------------------

1. 使用 Visual Studio來學習ASP.NET,不要用其他怪軟體

時代已經過去了,以前寫程式有很多開發工具能選擇。

現在的 Borland去哪裡了?微軟不光是OS、AP、現在就連 "開發工具"都一家獨大了。http://www.zdnet.com.tw/news/software/0,2000085678,20129203,00.htm

要學習 .NET,還在用 Express版,將來出社會,會有軟體公司用這種「精簡版」來開發程式嗎?

到時候重新學一遍,也是浪費時間。

去面試時,說自己只會用 Express版,哪個老闆敢用你?

更誇張的是:有人竟然用 DreamWeaver來學習 ASP.NET.......我真的只能用 Orz來形容。

DreamWeaver很強,是很棒的HTML網頁編輯器。但它用 User Control來方式推出自己的這種控制項與標籤。

初學者」用他來學習 ASP.NET,你將來怎麼辦?連正統語法都還沒學熟悉,就用第三方軟體的怪標籤,將來怎麼改?

的確,為了幫學校、學生省錢,很多電腦書採用這種免費下載的 Express版軟體,

但我個人認為:千省萬省,不要省工具(工欲善其事,必先利其器)。

微軟的官方下載網站 download.microsoft.com 可以下載試用版。就算每30 or 60天要重新安裝一次,「初學者」也要破釜沈舟搞定。

不然的話,連工具都選錯,將來怎麼辦?

不學第一手的知識,難道要學第二手的嗎?要學被修改、重整過的嗎?......形勢比人強,現在就是微軟包山包海的時代。

除非不學 .NET改走 Java路線。不然的話,還是以「正統資源」為主

2. 書本的範例放在哪裡?

很多書每一個功能都講了,最後幾章放幾個大的範例。

初學者」遇見這種書,下場大概只有一個。

  • COPY範例直接改,發現不會動......因為自己底子差(沒從頭開始讀書),也不知如何下手修改。
  • 然後,就有人開始罵書本寫的爛!!!以後只要是放購物車、聊天室當作書後範例的都是爛書!?

我要反駁一下:

如果我們改一改,把聊天室的範例,放在 Application/Session/Cookie這一章來解說,

根據我實際授課的經驗,學生不但學得好,而且很快就理解 Application/Session的差異與用法。

為什麼會這樣呢?

因為剛學完理論,立刻作一個有用的「習題」。學生記得牢,有感覺。

這範例(有用的「習題」)不是九九乘法表這種無趣的數學題,是真正網路上看的見的功能。....學生當然有興致。

把「大型範例」一股腦的全放在書本後面,「初學者」能力不夠,一遇見困難,根本不知道自己該回到哪一章去補強這些知識。

所以,與其提供一個超完美的聊天室(大型功能、鉅細靡遺),當成書本後面的「大型範例」。

倒不如把功能簡化,只求這個範例能「活用」目前的重點即可。

3. 什麼都講過一遍,但看完書之後,什麼功能都兜不起來

很多老師上課也是一樣,教程式總是要學生去解數學題,例如:找最大公因數、九九乘法表...等等。

每一種基礎語法都講了,結果真正寫程式時,愣住了。不知道要用什麼來寫?

等到我出社會,我才發現:基礎語法學"IF判別式"與"迴圈"兩個就夠用了。

學自己最需要的,學最實用的。與其「貪多嚼不爛」,不如學適合自己的。

那麼,初學者那裡知道自己需要什麼呢?......這問題很大,真的很大了。.....

我的建議是:多買書、多看,跟著書本進度來走。

一旦書本看的多,就會知道哪些「重點」是大家必提的共識!

4. 除了教科書之外,懶得買書,只想不勞而獲。

這兩年的電腦書市場,非常低迷不振。原因是學生不想買書,只想上網隨便看幾篇免費文章,抄抄改改就算了。

但因為「初學者」能力不夠,就算有大師分享範例,能力不夠一樣看不懂。

啥?您不信?......上網找找黃忠成老師的「 GridView 範例集」,我看看有幾個人能看懂八成以上。

(除非基礎很扎實,學得好,不然的話,高階的範例就算人家願意公開,我們都沒能力吸收起來)

也因為學生不想買書,所以書商大量推出「教科書」內容,減少店頭販售的電腦書(偏偏店頭賣的電腦書,走向都專業一點)。

這種「教科書」內容,大致如下:

  • 適合一學期教學(所以內容不可能太多)。
  • 講「淺」不談「深」。有些談、有些不談。(我不清楚出版社為何挑中這幾章的內容來談?)
  • 功能大部分都有講,但前後不易整合。

我看過一本ASP.NET教科書,裡面不談ADO.NET與GridView的,想想看,這種教科書能學到什麼?

但很奇怪喔,裡面卻談了AJAX、Master Page與File。(我也不清楚:初學ASP.NET,書裡面為何要放這幾章?為何某些內容又不提?.....我也不懂。似乎純粹只是為了一學期講完來考量的)

以我為例好了,我當年學ASP,花最多時間在ADO上面。 .NET剛出來,我也是花最多時間看ADO.NET的東西。

當年,市面上每一本中文書,我都買了(不論內容深淺)。原文書能找到電子檔的,我盡量找來看。

書本內容沒有好壞,只有「自己有沒有認真看完」!中文書,再怎麼說都是自己母語,閱讀速度最快,入門最簡單)

所以,聽到出版社的人員跟我反應:現在資訊科系學生不愛去店頭買書的。......我真的嚇一跳,連書都不買了,那「初學者」要怎麼從頭學起?

寫程式這條路,1. 絕對不可能只學一兩學期的,2. 更不可能一本書就能搞定(寫程式的道路上,沒有一本搞定的聖經)。

如果您心裡面有上面這兩個念頭,那死期將近。

初學者」要把程式學好,就是要不斷地看書、找資料、參考別人範例、參與討論.....

業界的工程師因為有案子的壓力,自然而然會做這些事,所以能力累積得很快。

初學者與學生沒有立即的壓力,如果手邊又沒書參考,那麼經驗的累積會非常~非常~慢~

如果自己又不看書,那麼成長幾乎是停滯不動的

=======================================================

越寫越擔心,很怕有人立刻開戰........幹剿起來

=======================================================

提了這些問題,那麼我的解法在那邊?

其實,2001年我就遇見這問題了。那時候我寫了一段時間的Web程式,被調去資策會的教育訓練中心當講師。

我心裡也毛毛的。尤其是前一位老師,聽班主任說:上第一節課就被學生抗議轟下台。

(因為500小時的就業輔導班,學費很貴,要價十幾萬。學生很認真的~)

我那時候,基本程式只談IF判別式與迴圈。SQL指令只談基本語法(因為有其他專任老師教過資料庫與SQL了)

第一、二個範例,就是 Master-Detail。

第三個範例,就是資料新增。

....然後是簡單的搜尋引擎、會員註冊與功能(Session & Cookie)、留言版、關連式資料庫、其他常見的網站功能。

那時的班主任也很怕,我下這種猛藥(前三個範例,前三節課的內容)。學生一旦學不會立刻又抗議了

沒想到情況出奇的好!因為這些範例,每個網站都有,都用的到。所以學生學習興致高。

我又刻意把範例的難度降低。日後慢慢加入新功能,最後補齊。學生學起來都不錯,回家作業都能完成。

最後,要畢業前的專題,竟然通通都選Web專案來作。可見他們對於Web Programming有興趣、也有信心能做好。

=======================================================

後來出書,也想依循這個範例與進度。

但是作不太到。

因為出版社還是希望保留「概論、介紹、基礎語法、基礎SQL」等等,這些章節不能少。如此一來,篇幅又佔去不少

要求一本書不能超過600頁。......加上學校老師又給一堆建議(有趣的是,不同的老師給的建議還相互抵觸).......

最後,一碗湯要上桌前,多少還是走味了

如同黃忠成老師所說的:「書的讀者層 也是一個讓計劃無法如期實行的原因,

教會讀者們如何運用一個技術是一回事,培養他們成為高級設計師又是另一回事,

Step by Step是一個入口,Deep Inside是一個出口,兩個門都得有人帶,

但是!!走進來的人 多過於 走到出口的人,一大半的人都是轉頭而去的

原文出處:http://www.dotblogs.com.tw/code6421/archive/2008/05/07/3855.aspx

實在是心有戚戚焉。

不論如何,初學者多買書、逼自己多學習、多看......是必要的。

這年代,想要前五年薪資比人家高,工作比人家好找。

資訊軟體科系是熱門的,絕對沒問題。No Pain, No Gain!

=======================================================

ASP.NET 2.0與3.5十分雷同。如果我粗淺的分類,ASP.NET 3.5 = ASP.NET 2.0 + AJAX + LINQ + 新的控制項

那麼許多 ASP.NET 2.0的書還是很有購買的價值。

初學者,要學的簡單、學得廣泛。

董大偉老師的書,厲害!(博碩出版,ASP.NET 2.0深度剖析範例集)

能力夠了,聖殿祭司的書可以補強(基峰出版,ASP.NET 2.0專家技術手冊)。

這兩本都很讚。(但順序如果相反,我不保證不會走火入魔,因為聖殿祭司的書,部份章節有難度)

黃忠成老師的書,也是很難得的鉅作。除了可以學到很多底層的細節之外,更可以考驗自己的能力到達什麼位階。

最後打一點廣告,我的書快出來了

=======================================================

覺得市面上的書都不好,怎麼辦?

=======================================================

當您覺得市面上的中文書都不好的時候,有些方向供您參考:

第一,直接看原文書。用英文寫書,很直接,會比中文更能直指核心。這一點,相信在大學看過原文書的人,都有感覺。

第二,直接看微軟MSDN的文件,有中文的(但是,翻譯得很不順,有些細節講得太細。但範例&程式碼都很值得學習)。

第三,上網討論,很多論壇的問與答,都是很難得的經驗。這些討論,很難有書本會講得這麼細節。(小朱在「旗標」有出版一本問題集,很不賴。http://www.microsoft.com/taiwan/msdn/books/asp.net/asp.net4.htm

有本事覺得市面上的中文書,都搔不到自己癢處。 我想您的基本能力應該是沒問題了。


但是,很可惜的,我最常看見的「初學者」,都是不買書,甚至書都沒看就亂問一通了。

沒有基本能力,就想上網找免費資源了。

看過武俠小說的人都知道,底子不好又四處亂練功,下場就是......(科科~~)

並不是我們藏私。而是BLOG、討論區或是網頁,要做到「圖文並茂」真的好難好難。

沒有基礎能力的話,我講到嘴破,甚至直接給程式碼,還是無法解惑

總之,打好自己的底子,培養基本能力,是每一個初學者的基本功。

沒有一種能力,是會憑空得來。是不需努力就會有的。

投資自己,是一輩子最有積效的事。

相關的文章:

http://www.allenkuo.com/EBook5/view.aspx?TreeNodeID=7&id=9

http://blog.blueshop.com.tw/topcat/archive/2007/12/06/53569.aspx

如何使用 .NET,從檔案中讀取 XML

如何使用 .NET,從檔案中讀取 XML


原始的 Books.xml文件如下:

01 xml version="1.0" ?>
02 -
04 - <bookstore>
05 - <book genre="autobiography">
06 <title>The Autobiography of Benjamin Franklintitle>
07 - <author>
08 <first-name>Benjaminfirst-name>
09 <last-name>Franklinlast-name>
10 author>
11 <price>8.99price>
12 book>

13 - <book genre="novel">
14 <title>The Confidence Mantitle>
15 - <author>
16 <first-name>Hermanfirst-name>
17 <last-name>Melvillelast-name>
18 author>
19 <price>11.99price>
20 book>

21 - <book genre="philosophy">
22 <title>The Gorgiastitle>
23 - <author>
24 <name>Platoname>
25 author>
26 <price>9.99price>
27 book>
28 bookstore>

資料來源: http://support.microsoft.com/kb/301225/zh-tw

完整的程式碼清單

Imports System.Xml

Module Module1

Sub Main()
Dim reader As XmlTextReader = New XmlTextReader("books.xml")

Do While (reader.Read())
Select Case reader.NodeType

Case XmlNodeType.Element '註解:Display beginning of element.
Console.Write("<" + reader.Name)
If reader.HasAttributes Then '註解:If attributes exist
While reader.MoveToNextAttribute()
'Display attribute name and value.
Console.Write(" {0}='{1}'", reader.Name, reader.Value)
End While
End If
Console.WriteLine(">")

Case XmlNodeType.Text '註解:Display the text in each element.
Console.WriteLine(reader.Value)

Case XmlNodeType.EndElement '註解:Display end of element.
Console.Write(" Console.WriteLine(">")
End Select
Loop
Console.ReadLine()

End Sub

End Module

另外一個範例,也是透過 XMLReader.Read()方法來作

http://msdn.microsoft.com/zh-tw/library/system.xml.xmltextreader.read(VS.80).aspx

下列範例讀取 XML 檔案 並顯示每一個節點。

Option Strict
Option Explicit

Imports System
Imports System.IO
Imports System.Xml

'Reads an XML document
Public Class Sample
Private Const filename As String = "items.xml"

Public Shared Sub Main()
Dim reader As XmlTextReader = Nothing

Try
' Load the reader with the data file and ignore all white space nodes.
reader = New XmlTextReader(filename)
reader.WhitespaceHandling = WhitespaceHandling.None

' Parse the file and display each of the nodes.
While reader.Read()
Select Case reader.NodeType
Case XmlNodeType.Element
Console.Write("<{0}>", reader.Name)

Case XmlNodeType.Text
Console.Write(reader.Value)

Case XmlNodeType.CDATA
Console.Write("", reader.Value)

Case XmlNodeType.ProcessingInstruction
Console.Write("", reader.Name, reader.Value)

Case XmlNodeType.Comment
Console.Write("", reader.Value)

Case XmlNodeType.XmlDeclaration
Console.Write("'1.0'?>")

Case XmlNodeType.Document

Case XmlNodeType.DocumentType
Console.Write(", reader.Name, reader.Value)

Case XmlNodeType.EntityReference
Console.Write(reader.Name)

Case XmlNodeType.EndElement
Console.Write("", reader.Name)
End Select
End While

Finally
If Not (reader Is Nothing) Then
reader.Close()
End If
End Try
End Sub
End Class

類別說明

XmlTextReader

讀取字元資料流。它是順向讀取器,含有傳回內容和節點型別中之資料的方法。文件類型定義 (DTD) 或結構描述不受支援。若 XML 文件含有 DTD,則 DTD 將會被剖析,但不會用來進行驗證或加入預設屬性。http://msdn.microsoft.com/zh-tw/library/system.xml.xmltextreader.read(VS.80).aspx

XmlNodeReader

透過 XML 文件物件模型 (DOM) API 提供 XmlReader,就像 XmlNode 樹狀結構。在 XmlNode 中取得,並傳回它在 DOM 樹狀結構中發現的任何節點,包括實體參照節點。它不支援 DTD 或結構描述驗證,但是它可以解析定義於 DTD 中的實體。http://msdn.microsoft.com/zh-tw/library/system.xml.xmlnodereader.read(VS.80).aspx


Windows 2008果然是好樣的!

Windows 2008果然是好樣的!


同事去參加微軟研討會,拿到試用版的 Windows 2008 / Vista 兩者的視窗畫面都雷同。

如我所預料,就跟當年的 Windows 2003 / XP一樣

當年的 Windows 2003很精簡、畫面跟XP一樣漂亮,但開關機更快。

不需要的服務,Win2003不會主動裝上去(就不會浪費資源,也不會有安全問題)

今天同事裝好這兩套新的OS,跟大家報告一下:

Windows VISTA安裝完成,一開機 860MB RAM.....挖勒!Orz

Windows 2008好樣的!一開機完成,有裝IIS,只有396MB RAM。果然棒!

測試機器:Intel 2.4G CPU + 2GB RAM。

比較有趣的是,Win2008一安裝好之後,就是SP1的版本了......哈哈!(原因請看這裡-- http://os.yesky.com/windowsvista/360/7811360.shtml

我剛好也在昨天幫我的 Vista(合法購買的版本喔!)裝上SP1,挖勒!光是SP1就五百多MB,天啊!

有傳說中,Vista+SP1以後效能大幅提昇的感覺嗎?........恩!我相信評比數據上會有提升,但使用感覺上就不要有太多期盼

關於相關文章,請參考這篇Windows Vista減少不必要的服務、最佳化(優化) (我猜啦,Win2008閱讀此文也有幫助)

電子時報的報導-- http://app.digitimes.com.tw/ShowNews.aspx?zCatId=821&zNotesDocId=0000051444_A4S2NK32NV5NNMX3TKX9C

天極網的報導-- http://os.yesky.com/win/213/7652713.shtml

2008年5月7日 星期三

VS 2008 Hotfix,解決「屬性視窗」卡住的問題

VS 2008 Hotfix,解決「屬性視窗」卡住的問題


使用VS 2008常常發現運作得很不順利,尤其是點選控制項之後,好像卡住了。
屬性視窗就是跳不過去。老是卡在原本的位置。
上網找了一下,發現已經有前輩提供解答了。目前這個 hotfix已經推出中文版。

資料來源:黑暗執行緒 http://blog.darkthread.net/blogs/darkthreadtw/archive/2008/02/11/vs-2008-hot-fix-roll-up.aspx


VS 2008 Hotfix,解決「屬性視窗」卡住的問題
https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=10826

這個檔案我下載之後,解不開(微軟自己包裝成一個自動解壓縮的檔案)
後來我用 WinRAR(共享軟體)手動解壓縮才成功。

2008年5月6日 星期二

微軟建議的:寫程式的好習慣(命名與編碼規則)

微軟建議的:寫程式的好習慣(命名與編碼規則)
看了這兩篇文章,才發現原來我有些壞習慣。
不改不行。

以下兩篇中文的說明,大家看看,多少有些學習與改進的機會。
Visual Basic 編碼慣例 http://msdn.microsoft.com/zh-tw/library/h63fsef3(VS.80).aspx
Visual Basic 命名慣例 http://msdn.microsoft.com/zh-tw/library/0b283bse(VS.80).aspx

ASP.NET轉成PDF檔輸出

ASP.NET轉成PDF檔輸出
原文出處:http://www.aspnetworld.com/articles/2004011801.aspx

Solution 1: Use an open-source .NET PDF library. Sample list:
ASP.NET FO PDF at SourceForge.net - generates XSL-FO from DataTable to render PDF
iTextSharp at SourceForge.net
Examples and Tutorial: http://itextsharp.sourceforge.net/
Also see this article: Create PDF on the fly with .NET and iTextSharp by Valerio Fornito, DoPostBack.com
PDFCreator at GotDotNet - design PDF document visually using Visual Studio IDE
Report.NET at SourceForge.net

Solution 2: Use a commercial .NET PDF library. Sample list:
ABCpdf .NET by WebSupergoo - free license also available
Apoc XSL-FO by Chive Software - generates PDF using XSL-FO
Aspose.Pdf by Aspose
DynamicPDF by ceTe Software
PDF4NET by O2 Solutions
PDFLib by PDFLib GmbH
TallPDF.NET by TallComponents - able to create PDF documents either programmatically using an object model or from XML.
Tutorial: Create and manipulate PDF documents - 100% .NET by Frank Rem (CodeProject.com)
XMLPDF by Visual Programming - converts XML to PDF


Solution 3: Use activePDF WebGrabber to convert any URL output to PDF on-the-fly.

Solution 4: Use a report generator like Crystal Reports or SQL Server Reporting Services to render to PDF.
How to Create PDF from ASP.NET pages by Edward Tanquay (DeveloperFusion.com) - using Crystal Reports
Crystal Reports: Add Professional Quality Reports to Your Application with Visual Studio .NET by Andrew Brust (MSDN Magazine)
Related Resources
XSL FO Tutorial at RenderX
Definitive XSL-FO by G. Ken Holman
XSL-FO: Making XML Look Good in Print by Dave Pawson

後置程式碼(CodeBehind) 想要寫一個 蹦現視窗Pop-up , 出現警告訊息



ASP.NET 後置程式碼(CodeBehind) 想要寫一個 蹦現視窗Pop-up , 出現警告訊息該怎麼做呢?
 
請看程式範例,Try....Cacth....End Try 最底下的那一段
 
(改寫幾個字,謝謝奚江華老師,聖殿祭司的書。碁峰出版)


2008年4月28日 星期一

Global.asax文件裡面的事件

Global.asax文件裡面的事件
資料來源:http://www.xmlasp.net/n1247c12.aspx

Global.asax檔繼承自HttpApplicatio類別,它維護一個HttpApplication Object Spool,並在需要時將Spool中的物件分配給應用程式。Global.asax 檔包含以下事件:

‧ Application_Init:在應用程式被實例化或第一次被調用時,該事件被觸發。對於所有的HttpApplication物件實例,它都會被調用。
‧ Application_Disposed:在應用程式被銷毀之前觸發。這是清除以前所用資源的理想位置。
‧ Application_Error:當應用程式中遇到一個未處理的異常時,該事件被觸發。
‧ Application_Start:在HttpApplication 類的第一個實例被創建時,該事件被觸發。它允許你創建可以由所有HttpApplication 實例訪問的物件。
‧ Application_End:在HttpApplication 類的最後一個實例被銷毀時,該事件被觸發。在一個應用程式的生命週期內它只被觸發一次。
‧ Application_BeginRequest:在接收到一個應用程式請求時觸發。對於一個請求來說,它是第一個被觸發的事件,請求一般是用戶輸入的一個頁面請求(URL)。
‧ Application_EndRequest:針對應用程式請求的最後一個事件。
‧ Application_PreRequestHandlerExecute:在 ASP.NET 頁面框架開始執行諸如頁面或 Web 服務之類的事件處理程式之前,該事件被觸發。
‧ Application_PostRequestHandlerExecute:在 ASP.NET 頁面框架結束執行一個事件處理程式時,該事件被觸發。
‧ Applcation_PreSendRequestHeaders:在 ASP.NET 頁面框架發送 HTTP 頭給請求客戶(流覽器)時,該事件被觸發。
‧ Application_PreSendContent:在 ASP.NET 頁面框架發送內容給請求客戶(流覽器)時,該事件被觸發。
‧ Application_AcquireRequestState:在 ASP.NET 頁面框架得到與當前請求相關的當前狀態(Session 狀態)時,該事件被觸發。
‧ Application_ReleaseRequestState:在 ASP.NET 頁面框架執行完所有的事件處理程式時,該事件被觸發。這將導致所有的狀態模組保存它們當前的狀態資料。
‧ Application_ResolveRequestCache:在 ASP.NET 頁面框架完成一個授權請求時,該事件被觸發。它允許緩存模組從緩存中為請求提供服務,從而繞過事件處理程式的執行。
‧ Application_UpdateRequestCache:在 ASP.NET 頁面框架完成事件處理程式的執行時,該事件被觸發,從而使緩存模組存儲回應資料,以供回應後續的請求時使用。
‧ Application_AuthenticateRequest:在安全模組建立起當前用戶的有效的身份時,該事件被觸發。在這個時候,用戶的憑據將會被驗證。
‧ Application_AuthorizeRequest:當安全模組確認一個用戶可以訪問資源之後,該事件被觸發。


‧ Session_Start:在一個新用戶訪問應用程式 Web 站點時,該事件被觸發。
‧ Session_End:在一個用戶的會話超時、結束或他們離開應用程式 Web 站點時,該事件被觸發。

更詳細的內容,請參閱下面的文章
資料來源:http://www.xmlasp.net/n1247c12.aspx

[MSDN] VB語法大全,能上網就能用

[MSDN] VB語法大全,能上網就能用
全都是正體中文的說明
VB語法,依照英文列表:http://msdn2.microsoft.com/zh-tw/library/2f43da0y(VS.80).aspx
資料型態:http://msdn2.microsoft.com/zh-tw/library/47zceaw7(VS.80).aspx
常用的VB函式,依照英文列表:http://msdn2.microsoft.com/zh-tw/library/32s6akha(VS.80).aspx

使用 Using...End Using區塊來寫程式,要非常小心!

使用 Using...End Using區塊來寫程式,要非常小心!http://msdn2.microsoft.com/zh-tw/library/htd05whh(VS.80).aspx

不要忽略了裡面可能發生的危機。
http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=1417995&SiteID=14
http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3225947&SiteID=14

以下是一個簡單的程式。以資料庫連結來說(變數名稱Conn)。我寫了一小段程式來觀察,如下面的紅字。
Using區塊的確會自動幫我們關閉,完成這兩件事。Conn.Close()與Conn.Dispose()
但其他物件,我就不確定。例如:DataReader的 .Close():


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim SQLstr As String = "SELECT top 5 * From test"
Dim Conn As New SqlConnection("DB_ConnectionString")
Dim cmd As New SqlCommand(SQLstr, Conn)

Using Conn
Conn.Open() '==第一,連結資料庫
'==第二,設定SQL指令****(巢狀 Using)****==
Using dr As SqlDataReader = cmd.ExecuteReader()
'==第三,自由發揮,將資料呈現在畫面上==
'---- 把DataReader獲得的資料,跟GridView控制項繫結(.DataBind())在一起。
'---- GridView控制項就會自動把資料展現在畫面上了。
GridView1.DataSource = dr GridView1.DataBind()

cmd.Cancel()
dr.Close()
End Using '-- 處置DataReader****(巢狀 Using)****

End Using '==第四,關閉資源&資料庫的連線==
'—註解:資料庫連線(Conn)會「自動關閉」。因為它是由 Using來開啟,End Using會自動關閉之。
Response.Write( Conn.State)
End Sub

跨網頁公佈 Cross-Page Posting

跨網頁公佈 Cross-Page Posting

我在A網頁,要輸入日期。
按下日曆,就會跳出一個新網頁B。
在B網頁典選的日期,會自動填回A網頁裡面。
以前常常會用到這樣的功能,請看這篇文章--ASP.NET父子視窗的應用,利用子視窗的Gridview選取一個值,傳回父視窗

依照微軟的作法,ASP.NET可以使用 Cross-Page Posting (跨網頁公佈)
完全不需要用到 JavaScript就能完成喔。
請參考下面的中文文章 ^_^
http://msdn2.microsoft.com/zh-tw/library/ms178139.aspx

點部落的這篇文章也是不錯。http://www.dotblogs.com.tw/dotjum/archive/2008/04/28/3521.aspx

2008年4月25日 星期五

DSLR,單眼數位相機的選購

小弟在高中就開始玩單眼相機,沒啥技術,只是家裡有一台,隨手拍拍,好玩而已。
一直到了大學,也加入攝影社。但興趣一直維持到現在。


2003年我買了第一台數位相機(DC),是「類單眼相機」,
就是有單獨的鏡頭(比一般DC好),但鏡頭不可替換,跟機身合併在一台。
Panasonic (LUMIX)的FZ-1,恆定光圈 F2.8,光學十二倍萊卡鏡頭。
當年買了一萬八。這規格就算是今日DC,仍舊是非常高階的規格。可惜當年只有兩百萬像素。
類單眼相機,我的確很偏愛Panasonic (LUMIX)的FZ系列。

不要迷信像素喔!DC的像素沒啥用。
光學鏡頭才是重點。你的光學鏡頭不好,像素再高,都是輔助而已。
目前的DC消費型像機,大部分都還沒有我上一台舊DC相機好

但很快就遇見瓶頸了。主要的缺點,所有DC都一樣,對焦慢、快門慢。
對於曾經用過機械式單眼相機的我來說,實在味如嚼蠟。

後來終於下定決心,投資DSLR(真正的單眼數位相機)。
1. 因為鏡頭與機身各自獨立,鏡頭可以用很久,很保值!
2. DSLR耐用性高,因為沒有LV功能,感光鼓可以用比較久。
(所謂LV功能,就是Live View。一般的DC可以從螢幕中,直接取景與拍照,DSLR大部分都沒有這功能。)
3. DC的錄影功能,我從來沒用過。我也不需要(DSLR也沒這功能,所以很多人第一次用會很驚訝!)
4. DSLR不太容易跌價,改朝換代也沒有DC這麼誇張。

.............沒錯!我這樣的人,不買DSLR,那還要買什麼?

研究了很久。

入門級,鏡頭+機身(稱為KIT組)比較划算。
兩萬五能買到 Canon 400D or Nikon D60。千萬像素,很夠用了。
想要LV 功能的,可以選 Sony Alpha(A350) or Canon D450,都是KIT組,附送鏡頭。兩萬六七買的到
這種入門級的機種,附贈的鏡頭大約是 15~55mm

沒想到我研究了半個多月,最後竟然買了三萬出頭的Nikon D80 (KIT組)。
已經是中階產品(不算入門級)的了。

DSLR果然猛!
因為沒有LV功能,螢幕不需一直開啟,很省電。
ISO感光值超過1600,隨便拍都很漂亮。尤其是在車展或是資訊產的昏暗會場。
快門超快,對焦也快。簡單的說,我一拿起向機,就能立刻拍到我看見的景色。
不像以前的DC,按下快門,要等兩三秒。拍到的東西不是我看到的,會有延遲。


爽快度第一,果然厲害。


朋友~~您也常常覺得:
小DC在某些場合拍出的照片,晃動很厲害嗎?
拍到了一個瓶頸,不能繼續進步?
DC拍照時,爽度就是不夠!

沒錯!有了上面的症頭,你也該加入DSLR行列了。

Windows Vista減少不必要的服務、最佳化(優化)

Windows Vista減少不必要的服務、最佳化(優化)

Vista比較討人厭的地方,在於「啟動很多的多媒體服務」,這些服務很耗資源,而且少用。

更可怕的是:很多服務,在 Win2003可以手動關閉的。

在VISTA無法關閉,或是仍就會啟動這些服務。

如此一來,一開機所消耗的RAM,就有很多無謂的浪費了。好可惜。



以前,我用Win2000 Pro透過自己的調整,開機只用96MB RAM

Win2003透過自己的調整,開機只用360幾MB RAM

但是VISTA,不管我怎麼閱讀文件,怎麼停止不需要的服務,頂多能壓制到760MB開機。

我以前用1GB RAM,現在升級為2GB RAM,但開機完成,都會消耗760~800MB。

VISTA真的很浪費資源,而且是用不到的資源啊~ Orz



Windows Vista減少不必要的服務、最佳化(優化) 請參考這篇文章

http://www.cctips.com/show.aspx?id=130&cid=7

2008年4月24日 星期四

ASP.NET 2.0 二十個實用小範例

ASP.NET 2.0 二十個實用小範例

在還沒出書之前,我自己找的一些範例,日積月累也有二十幾個。

比較特別的是「多國語言」的作法,我蒐集了三個。


因為東西太多,網頁太長(導致速度很慢,請您耐心等候)

網頁是: http://www.taconet.com.tw/mis2000_aspnet/ASP_NET20.htm

2008年4月22日 星期二

輸出 Excel檔案,有多個Work Sheet(工作表)?

Excel 2003當我們另存新檔,會有一個「Excel XML」檔的選項。
存檔後,XML格式如下:








<?xml version="1.0"?>

<?mso-application progid="Excel.Sheet"?>

<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"

xmlns:o="urn:schemas-microsoft-com:office:office"

xmlns:x="urn:schemas-microsoft-com:office:excel"

xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"

xmlns:html="http://www.w3.org/TR/REC-html40">





<Worksheet ss:Name="Sheet1">

<Table ss:ExpandedColumnCount="2" ss:ExpandedRowCount="3" x:FullColumns="1"

x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="16.5">

<Row>

<Cell><Data ss:Type="Number">1</Data></Cell>

<Cell><Data ss:Type="String">aaa</Data></Cell>

</Row>

<Row>

<Cell><Data ss:Type="Number">2</Data></Cell>

<Cell><Data ss:Type="String">bbb</Data></Cell>

</Row>

<Row>

<Cell><Data ss:Type="Number">3</Data></Cell>

<Cell><Data ss:Type="String">ccc</Data></Cell>

</Row>

</Table>

<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">

<ProtectObjects>False</ProtectObjects>

<ProtectScenarios>False</ProtectScenarios>

</WorksheetOptions>

</Worksheet>


<Worksheet ss:Name="Sheet2">

<Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"

x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="16.5"/>

<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">

<ProtectObjects>False</ProtectObjects>

<ProtectScenarios>False</ProtectScenarios>

</WorksheetOptions>

</Worksheet>

<Worksheet ss:Name="Sheet3">

<Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"

x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="16.5"/>

<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">

<ProtectObjects>False</ProtectObjects>

<ProtectScenarios>False</ProtectScenarios>

</WorksheetOptions>

</Worksheet>

</Workbook>

 




到我網站去看看 http://www.taconet.com.tw/mis2000_aspnet/ASP_NET20.htm#22_excel





看看上面的XML碼,您就知道不同的 Work Sheet該怎麼作了。
把資料庫裡面的資料,透過XML排版,就能把結果輸出成 Excel檔案。

而且有多個 Work Sheet

FileUpload控制項,檔案上傳

以前寫ASP要靠第三協力廠商提供的控制項才能上傳,現在有了「FileUpload」控制項,變得很簡單。

底下這兩個網址,MS提供的範例非常精彩且實用!照抄都能學到東西~棒!
http://msdn2.microsoft.com/zh-tw/library/system.web.ui.webcontrols.fileupload.aspx

http://msdn2.microsoft.com/zh-tw/library/ms227669.aspx



Protected Sub Page_Load(ByVal sender As Object,
ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack Then
Dim path As String = Server.MapPath("~/UploadedImages/")
Dim fileOK As Boolean = False
If FileUpload1.HasFile Then
Dim fileExtension As String
fileExtension = System.IO.Path. _
GetExtension(FileUpload1.FileName).ToLower()
Dim allowedExtensions As String() = _
{".jpg", ".jpeg", ".png", ".gif"}
For i As Integer = 0 To allowedExtensions.Length - 1
If fileExtension = allowedExtensions(i) Then
fileOK = True
End If
Next
If fileOK Then
Try
FileUpload1.PostedFile.SaveAs(path & _
FileUpload1.FileName)
Label1.Text = "File uploaded!"
Catch ex As Exception
Label1.Text = "File could not be uploaded."
End Try
Else
Label1.Text = "Cannot accept files of this type."
End If
End If
End If
End Sub

2008年4月18日 星期五

ASP.NET 2.0 + FCKEditor--華麗的輸入介面

我從撰寫ASP的時候,就有用上 FCKEditor了。

下載點 http://www.fckeditor.net/download
畫面 http://www.fckeditor.net/images/demo_screenshot.gif






畫面真的很棒,簡直就是 Web版的 FrontPage or DreamWeaver

不過,到了ASP.NET,我卻沒有用它。
因為工作內容不需要這種華麗的輸入介面了。
為了寫書,又把它拿出來作示範。......沒想到搞了好幾天才成功~~~

上網一看,人家早就貼出經驗談了。
我還真是白做工啊。


可見得做事之前,要先查詢一下網路資源,節省大家時間。善用熱心前輩的經驗談啊~
ASP.NET 2.0使用FCKEditor初體驗
http://blog.blueshop.com.tw/topcat/archive/2006/11/30/45727.aspx

2008年4月17日 星期四

ASP.NET 訪客計數器

下面文章,是我即將推出的新書內容,分享一些給大家參考:

我們用一個文字檔來進行記錄,把訪客的參觀數字,記錄在這個檔案(counter.txt)裡面。重點是:務必把這個檔案的權限,設定為「可寫入」。這樣才能每次累計加一,記錄訪客人數。

本範例counter.aspx的後置程式碼很簡單,裡面只作了兩件事而已。第一是讀取counter.txt檔案,取出原本的訪客人數。第二,是把人數加一,然後以圖片方式展現在畫面上,再把更新後的數字寫入檔案。

數字圖片,放在本章範例的 image目錄底下。例如:1的圖片,就名為1lcdb0,gif。2的圖片,就名為2lcdb0,gif……以此類推。


Imports System.IO

Partial Class _Book_My_Files_Counter
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'====讀取檔案 (務必修改這個檔案的權限,需要「寫入」的權限)====
Dim sr As New StreamReader(Server.MapPath("counter.txt"))

'--把檔案內, 原本的訪客人數[加一]
Dim visitors As String = sr.ReadLine()
visitors = CInt(visitors) + 1

'--把訪客人數(數字) 轉換成 [圖片]展示在畫面上
Dim Length As Integer = Len(visitors) '--計算訪客人數的[字串長度]
Dim strURL As String = ""

While Length >= 1
'--訪客人數的每一位數字,都用圖片來呈現。
strURL = "" & strURL
Length = Length - 1
End While
sr.Close()

'====寫入檔案,紀錄最新的訪客人數==================
Dim sw As New StreamWriter(Server.MapPath("counter.txt"))
sw.WriteLine(visitors) '--找不到檔案也不會出現錯誤訊息,而且會自動新增一個檔案。
sw.Close()

Label1.Text = strURL
End Sub
End Class


想要學得更多,就看看我的書吧。....Thanks

網路聊天室,介紹 Application與Session的最佳案例

下面文章,是我即將推出的新書內容,分享一些給大家參考:

網路聊天室,是一個最適合用來解說 Application與 Session的範例了。作法並不難,但卻可以讓讀者立刻瞭解Application與 Session兩者的差異。

  • Application----全網站的人都可以看見,所以發表在聊天室的訊息,將透過 Application給大家瀏覽。
  • Session----鎖定單一使用者的瀏覽器環境,所以適合用存放自己的個人資訊,例如:暱稱、喜歡的文字顏色等等。


這個聊天室的範例,只有少少的兩支程式,外加一個 Global.asax檔案。
1 Case_1_Login.aspx----讓使用者登入、記錄他的暱稱、文字顏色這兩種資訊。
2 Case_2.aspx----聊天室的主程式。
3 Global.asax----事先設定好 Application的狀態。


======================================================
因為聊天室裡面人多嘴雜,大家發言可能很踴躍。所以我們預先設定了 Application(“A1”) ~ Application(“A15”) 共十五個Application來存放這些留言。如果讀者覺得不夠用,可以修改成 20或25都可以。

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' 應用程式啟動時執行的程式碼
For i = 1 To 15
Application("A" & i) = ""
Next
End Sub

….以下省略….


======================================================
接下來,設計 Case_1_Login.aspx。這個畫面很簡單,只是給使用者輸入帳號與個人偏好而已。這些個人偏好,因人而異,所以我們必須用Session()來存放這些資料。

為了避免無名氏登入鬧場,我們也使用了驗證控制項,避免有人不填寫名稱,就進入聊天室。而且,每個人可以選自己喜歡的字體顏色,在聊天室裡面發言。

Case_1_Login.aspx的後置程式碼,只有短短三行而已。

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Session("my_color") = DropDownList1.Items(i).Value
Session("my_name") = TextBox1.Text
‘—註解:使用者輸入帳號與文字顏色而已。這些個人偏好,因人而異,所以我們必須用Session()來存放這些資料。

Response.Redirect("Case_2.aspx")
End Sub

======================================================
聊天室的主程式(Case_2.aspx),功能也很簡單。裡面只有一個 Label控制項(用來展現大家的留言),另外還有一個輸入留言的 TextBox控制項而已。

後置程式碼分成幾個部份,我們逐一解說會比較清楚。不過大部分的程式都是雷同的。首先是 Page_Load()事件,在此我們作三件事:
第一,透過Session的判別,來防堵有人直接用URL網址連上這網頁。
第二,第一次登入聊天室的人,會看見目前的所有討論留言。 List_All()這段副程式是我們自己寫的,因為這一段很常用到,為了程式的可讀性,我們就把這一段獨立寫成副程式。
第三,為這個新加入的人,寫一段「歡迎詞」。提醒大家,有一位新人加入聊天室。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Session("my_name") = "" Then
'====1. 防止有人沒註冊就闖入===========
Response.Write("抱歉,請用正當程序,進行登入!...... )
Response.Write(請您回到--Case_1_Login.aspx登入畫面")
Response.End()
End If

If Not Page.IsPostBack Then
List_All() '====2. 第一次進到聊天室,會立刻出現目前所有人的談話內容====

'====3. 歡迎新夥伴加入====
Application.Lock()
'--註解:如果要更動Application裡面的資料,務必事先進行鎖定!

Dim my_Label As New StringBuilder
For i = 15 To 2 Step -1
Application("A" & i) = Application("A" & (i - 1))
my_Label.Append(Application("A" & i).ToString)
Next

'==== 上面這段FOR迴圈,是聊天室程式裡面的重點! ====
' 每當有人發表一則留言,原本畫面上的留言,就會向上推擠。
' 最新的留言,總會出現在畫面下方的最後一筆。
' 為了良好的效率,這裡我們改用 StringBuilder來處理字串。

Application("A1") = Session("my_name") & " " & FormatDateTime(Now, DateFormat.LongTime) & " 說: ====Hello~Everybody~歡迎新夥伴加入!!====
"
my_Label.Append(Application("A1"))
Label1.Text = my_Label.ToString

Application.UnLock()
End If
End Sub

‘-- 把常用的程式片段,獨立寫成一個副程式。以便常常呼叫,可讓程式”可讀性”提升。
Sub List_All() '====列出「目前」聊天室的所有談話內容====
Dim chatroom As New StringBuilder
For i = 15 To 1 Step -1
chatroom.Append(Application("A" & i).ToString)
Next

Label1.Text = chatroom.ToString
End Sub

======================================================

......................講得夠多了,有需要的話,買我的書吧~

如何購買NB?如何購買Notebook?如何購買筆記本電腦?

看了董大偉老師的一篇文章,http://studyhost.blogspot.com/2007/11/nb.html (關於NB執行速度的瓶頸 )
我也有所感觸。

小弟購買NB(Notebook,筆記本電腦)的日子不算早,大約在2001年初就成為NB一族。
以後就沒再使用桌上型電腦(PC / Desktop)來工作了。
對我來說,桌上型電腦PC,只是用來作備份而已。

---------------------------------------------------------------------------------
我用過的NB規格如下:

2001 Toshiba Satellite 4020,$四萬六。
硬體:Celeron-500MHz-Mobile + 196MB RAM + 6GB HDD+獨立顯卡 Trident 8MB + 12" TFT
軟體:Win2000 Pro + VS.NET 2003 + SQL 2000

2003 ECS精英電腦 G550,$三萬四。
硬體:Pentium 4 Mobile-1.7G + 512MB RAM + 20GB HDD + 內建顯示卡,SIS晶片 + 15" TFT
軟體:Win2003 + VS.NET 2003 + SQL 2000 + VB 6.0 + MS Biztalk Server

2005 Acer宏碁電腦,$三萬六。
硬體:Intel Dothan 1.73G + 1GB RAM + 60GB HDD + ATI X700獨立顯卡 + 15.4"寬螢幕
軟體:Win2003 + VS 2005 + SQL 2005

(理論上來說,依照小弟喜新厭舊的速度,2007年應該買新的NB,但因為孩子出生,所以節省一點 ^_^)

另外,公司還發過兩台NB給我用,都是超薄機種。
1. Acer Travelmate 3xx系列,不錯用。
2. Toshiba R100,當年最輕薄的機種,超貴(七八萬才買得到)!但超難用!
1.8"硬碟(可能轉速很慢吧?3600RPM嗎?)慢得像烏龜在爬,連我太太用起來都會抱怨。
沒辦法,為了短小輕薄,一定要犧牲一些效能。

這兩台NB,我不愛用,因為螢幕不夠大,寫程式很痛苦,都放在家裡養驢子(哈!沒關過機,每台都操足兩年,也沒當過)
後來換工作以後,公司配的是 Lenovo R60。也很好用,但可惜小弟胃口被養大了。
非得用 "寬螢幕" 不可。

---------------------------------------------------------------------------------
NB取代PC的日子,早就來了。不然我們公司也不會這麼賺錢,對吧?
不光是NB,包含大部分的電腦。 採購時,我也有些建議~~

除非您是 專業繪圖人員、電動玩具的熱愛者、專門跑數學計算、大量轉檔(影音檔)。

除了以上四者之外,根本不需要多快的CPU!
一般人,CPU買得越快,浪費越多錢!(CPU跌價很兇,買越新的款式、買越早,損失越多)

現在的CPU,就算是最便宜的款式,都足夠80%的使用了。
如果您不是上述的四大族群,根本不需要買最新款的CPU。

最有效的投資,應該是:

1.硬碟HDD。
7200 RPM(轉速),絕對是第一投資項目。
硬碟轉速跟電腦無關,不可能裝不上。裝上就能用!
轉速越快,電腦的 "整體"效能越好。
小弟肖想一台 7200 RPM/16MB Cache的 2.5"硬碟已經很久,但當初來不及買,台灣就缺貨了。
如果真的買不到7200RPM的硬碟,那第二順位就是買5400RPM 16MB Cache的硬碟(小弟現役機種)
目前SATA規格的2.5"硬碟,7200轉/16MB的機種很多,又便宜。不買實在可惜。
IDE規格的,就算了,別指望啦~

2. RAM
記憶體越多越好。裝了 Windows VISTA,2GB算是基本。
除非跟我一樣,會調整作業系統,會把不必要的服務刪除,不然的話,微軟的作業系統真的很浪費資源。
因此,小弟偏愛 Windows 2003(公司訂閱MSDN,所以可以合法使用)。
比起XP與Vista,Windows 2003 Server太棒了!不需要的東西,都不用裝,相容性很好,幾乎沒有軟體不能用。
開關機速度快,畫面美觀(跟XP一樣,但小弟從來不開,特效與外觀只是浪費電腦資源)
小弟使用 Win2003 + VS 2005 + SQL 2005來開發程式,電腦1GB就很順暢了。
可惜,小弟想不開,裝了 Vista以後,必須花錢消災,2GB才能伺候 Vista這老爺。而且VISTA很多服務無法手動關閉之,只能眼睜睜看她浪費資源,還有一堆軟體都不相容。
.............自此以後,小弟就很喜歡看「追殺比爾」這部電影了。
Windows Vista減少不必要的服務、最佳化(優化) 請參考這篇文章
http://www.cctips.com/show.aspx?id=130&cid=7

3.獨立顯示卡
我覺得可有可無ㄟ。因為我寫程式,用到的機會不多。
但因為現在價格降得很低,所以我還是建議「有獨立顯卡」會比較好。
這順位我擺在第三名。

4. CPU.......夠用就好,不要浪費錢。有雙核心即可!絕對夠用了~

其實這些答案,我在 Yahoo知識+至少回答過一百遍。
但太可惜了,大部分的人都不懂。

今天突然想起,又寫了一次
---------------------------------------------------------------------------------

如果是「品牌」呢?

嗯!小弟嘗過 Toshiba的鮮美滋味後,一輩子都忘不了。
但很可惜,生活經濟壓力大,再也買不起了。

後來用過 Acer(宏碁)以後,覺得他的C/P值最高。俗又大碗。
相同的款式,Acer就是比較便宜。

但很可惜,台灣地區的用戶,卻偏愛ASUS(華碩),我倒是有慘痛經驗。幫人買過兩台,都是一過保固期就死蹺翹,又沒料修。從此敬謝不敏。
但那兩位用戶,果然是愛台灣的死忠支持者,第二台還是買ASUS。(沒辦法,誰叫ASUS曾是台灣股王。就跟 Toyota汽車一樣,死忠者就是多。)

有位朋友在電腦商場販售NB,告訴我一些秘辛,但我不敢講。ASUS在台灣賣得好,果然市場策略是厲害。

---------------------------------------------------------------------------------
以價格來看。

除非您是上述四大族群(有特殊需求,所以必須花大錢),
否則的話,依照2007下半年~2008上半年的市場行情看來
我會建議各位,兩萬五買機身,剩下的兩千元,多買RAM,而且更換7200 RPM硬碟
這樣的NB,"整體"的使用感覺,絕對比三萬的機種要"順暢"。

..........把錢花在刀口上,才是高手,對吧?


下面這篇文章不錯,這位網友買到便宜又大碗的NB,跟我的採購概念差不多。
請參考看看:Mobile01 冷飯熱炒~2.5萬以下的獨顯好選擇HP V3602(含改XP過程)

2008年4月13日 星期日

什麼是MVP? What's MVP?微軟最有價值專家?


我是2008月底,發現微軟網站上的公告,就寫了報名表參加。

包含中英文履歷,但我交出去時已經遲了一天。也不知道對方(台灣微軟)有沒有收到?


我只知道MVP的審查至少有兩關,第一要通過台灣微軟的審核,然後才會到美國微軟作評審。




過了一個多月,我也淡忘了此事。

有一天(2008/4/7)早上突然接到手機,對方說是DHL,要寄一份美國來的包裹給我。

我心想「靠!詐騙集團又有新花招?」 Orz




但因為對方說這份包裹不用付錢,我才想到「可能」是美國的微軟總部寄來的東西

找了一下其他的信箱(我個人有五六個信箱,常用的只有兩個)....

Bingo!! 2008/4/1就有信件通知我獲獎!


我心想「四月一日,不是愚人節嗎?」 Orz (x 2)


========================================================

不論如何,我晚上回家就看見MVP的包裹了,心裡好興奮。

我太太還問我說:「你在網路上又買了什麼?從美國買了什麼啊?」 Orz (x 3)



先來看看包裝內容吧~






有一份得獎證書,一張卡片,還有一盒禮物(畫面中央的銀色包裝)


這個獎品看起來不錯,光是左上方的 PCMCIA滑鼠,定價就要89.99美金(約台幣兩千七!)
還有藍牙立體聲耳機與一個USB的加密設備。這盒禮物,我預計要台幣六千元左右。


還有一個小胸章!


很抱歉,我不想讓真名曝光,所以修改了照片。但證書上的名字是英文姓名。
========================================================


另外,微軟還給每一位MVP,一百五十美元(約台幣4500),可以到美國微軟網站購物,貨運費由他們支出(免費送到府上啦!)

當然,這份榮譽是無價的,不過上述的兩種獎品與獎金,合起來大概也有一萬元台幣了。

另外還送一年份的MSDN,真棒!