關於我

我的相片
用心思考、保持熱情,把工作上的經驗作分享與紀錄。希望能夠跟大家一起不斷的成長~

Windows下管理Oracle9i服務

在Windows 作業系統下安裝Oracle 9i時會安裝很多服務—— 並且其中一些配置為在Windows 啟動時啟動。 在Oracle 運行在Windows 下時,它會消耗很多資源,並且有些服務可能我們並不總是需要。你會發現不使用Windows 圖形介面就可以快速、完全地關閉資料庫會很有用。 只要擁有管理員許可權就可以通過net start 啟動一個服務,或者通過net stop 命令停止一個服務,從而控制以下服務中的任何一個。在Windows XP 中,可以通過在控制面板的服務中改變想要禁用的服務(OracleOraHome...)的啟動類型(Startup Type)參數,雙擊某個服務查看其屬性,然後將啟動類型屬性從自動改為手動。使資料庫在本地工作唯一需要運行的服務是OracleServiceORCL 服務(其中ORCL 是SID)。這個服務會自動地啟動和停止資料庫(使用shutdown 中斷)。如果安裝了一個資料庫,它的缺省啟動類型為自動。如果主要是訪問一個遠端資料庫,那麼可以把啟動類型由自動改為手動。 OracleOraHome92HTTPServer 服務(OraHome92 是Oracle Home 的名稱)是在安裝Oracle 時自動安裝的Apache 伺服器。一般情況下我們只用它來訪問Oracle Apache 目錄下的Web 頁面,比如說JSP 或者modplsql 頁面。 OracleOraHome92TNSListener 服務只有在資料庫需要遠端存取時才需要(無論是通過另外一台主機還是在本地通過 SQL*Net 網路協定都屬於遠端存取)。不用這個服務就可以訪問本地資料庫。 OracleOraHome92ClientCache 服務緩存用於連接遠端資料庫的Oracle Names 資料。正常情況下該服務的啟動類型是配置為手動的。然而,除非有一台Oracle Names 伺服器,否則沒有必要運行這個服務。 有四個服務是Oracle 企業管理器所必須的(Oracle Enterprise Manager),這個服務分別為: OracleOraHome92Agent(智慧代理),該服務監視資料庫和企業管理器請求,缺省啟動類型為自動。 OracleOraHome92SNMPPeerEncapsulatorOracleOraHome92SNMPPeerMasterAgent,處理安全網路管理協定服務。 OracleOraHome92PagingServer 通過一個使用數據機的數位傳呼機或者電子郵件發出警告。 OracleMTSRecoveryService 是可選的,該服務允許資料庫充當一個微軟事務伺服器、COM/COM+物件和分散式環境下的事務的資源管理器。 如果只是偶爾使用一下資料庫,那麼可以創建一個簡單的腳本任務來啟動和關閉伺服器,這樣每次只要雙擊腳本就可以了,可以不使用圖形介面。 1. 保存一個快捷方式自動地裝載這些檔。 2. 將Oracle 服務設為手動避免在Windows 啟動時啟動。 REM "dbstart.cmd" @echo off set ORAHOME="OraHome92" set ORASID="ORCL" net start OracleServiceORASID REM net start OracleORAHOMEHTTPServer REM net start OracleORAHOMETNSListener REM net start OracleORAHOMEClientCache REM net start OracleORAHOMEAgent REM net start OracleORAHOMESNMPPeerEncapsulator REM net start OracleORAHOMESNMPPeerMasterAgent REM net start OracleORAHOMEPagingServer REM net start OracleMTSRecoverService REM "dbshut.cmd" @echo off set ORAHOME="OraHome92" set ORASID="ORCL" net stop OracleServiceORASID REM net stop OracleORAHOMEHTTPServer REM net stop OracleORAHOMETNSListener REM net stop OracleORAHOMEClientCache REM net stop OracleORAHOMEAgent REM net stop OracleORAHOMESNMPPeerEncapsulator REM net stop OracleORAHOMESNMPPeerMasterAgent REM net stop OracleORAHOMEPagingServer REM net stop OracleMTSRecoverService

oracle備份還原

《 備 份 》 <1>cmd視窗使用sysdba連上oracle C:\> sqlplus "sys/bankpro@oracle9i as sysdba" <2>將oracle資料庫關閉 SQL> shutdown normal; <3>將oracle資料庫資料複製一份 ( 預設於oradata內,如oracle9i資料夾 ) 《 還 原 》 <1>cmd視窗使用sysdba連上oracle C:\> sqlplus "sys/bankpro@oracle9i as sysdba" <2>將oracle資料庫關閉 SQL> shutdown normal; <3>複製備份檔案至oracle資料夾中 <4>開啟oracle資料庫至nomount模式 SQL> startup nomount; <5>提升資料庫至mount模式 SQL> alter database mount; <6>修改資料庫檔案掛載位置 SQL> alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\CWMLITE01.DBF' TO C:\ORACLE\ORADATA\ORACLE9I\CWMLITE01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\DRSYS01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\DRSYS01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\EXAMPLE01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\EXAMPLE01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\EXCHANGE.ORA' TO 'C:\ORACLE\ORADATA\ORACLE9I\EXCHANGE.ORA'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\HIS.ORA' TO 'C:\ORACLE\ORADATA\ORACLE9I\HIS.ORA'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\INDX01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\INDX01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\INVOICE.ORA' TO 'C:\ORACLE\ORADATA\ORACLE9I\INVOICE.ORA'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\ODM01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\ODM01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\TOOLS01.DBF' TO C:\ORACLE\ORADATA\ORACLE9I\TOOLS01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\UNDOTBS01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\UNDOTBS01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\USERS01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\USERS01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\XDB01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\XDB01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\SYSTEM01.DBF' TO 'C:\ORACLE\ORADATA\ORACLE9I\SYSTEM01.DBF'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\REDO01.LOG' TO 'C:\ORACLE\ORADATA\ORACLE9I\REDO01.LOG'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\REDO02.LOG' TO 'C:\ORACLE\ORADATA\ORACLE9I\REDO02.LOG'; alter database rename file 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\REDO03.LOG' TO 'C:\ORACLE\ORADATA\ORACLE9I\REDO03.LOG'; 也可將上方Script製作成一個如Restore.txt的文字檔 再利用sqlplus執行: SQL> start c:\Restore.txt; 即可批次執行指令!! <7>提升資料庫至open模式 alter database open; <8>重新建立Temp檔 alter database tempfile 'E:\DANNYTEAM\DB\ORACLE\ORADATA\ORACLE9I\TEMP01.DBF' DROP; alter tablespace temp add tempfile 'C:\ORACLE\ORADATA\ORACLE9I\TEMP01.DBF' SIZE 40m reuse;

DataFormatString

DataFormatString="{0:格式字符串}"

DataFormatString 中的
{0} 表示資料本身,而在冒號後面的格式字串、代表我們希望資料顯示的格式;數字、貨幣格式:
在指定的格式符號後可以指定小數所要顯示的位數。例如原來的數據為「1.56」,若格式設定為{0:N1},則輸出為「1.5」。其常用的數值格式如下表所示:


格式字串 輸入 結果
{0:C} 12345.6789 $12,345.68
{0:C} -12345.6789 ($12,345.68)
{0:D} 12345 12345
{0:D8} 12345 00012345
{0:E} 12345.6789 1234568E+004
{0:E10} 12345.6789 1.2345678900E+004
{0:F} 12345.6789 12345.68
{0:F0} 12345.6789 12346
{0:G} 12345.6789 12345.6789
{0:G7} 123456789 1.234568E8
{0:N} 12345.6789 12,345.68
{0:N4} 123456789 123,456,789.0000
Total: {0:C} 12345.6789 Total: $12345.68
   
常用的日期時間格式:

格式
說明
輸出格式
d
精簡日期格式
MM/dd/yyyy 
D
詳細日期格式
dddd, MMMM dd, yyyy 
f
完整格式
(long date + short time)
dddd, MMMM dd, yyyy HH:mm
F
完整日期時間格式
(long date + long time)
dddd, MMMM dd, yyyy HH:mm:ss
g
一般格式
(short date + short time)
MM/dd/yyyy HH:mm
G
一般格式
(short date + long time)
MM/dd/yyyy HH:mm:ss 
m,M
月日格式
MMMM dd
s
適中日期時間格式
yyyy-MM-dd HH:mm:ss
t
精簡時間格式
HH:mm
T
詳細時間格式
HH:mm:ss

測試程式如下,將數字以撇擷(千分位)方式輸出:

擷取

資料庫規劃

我認為您得先規劃好您的資料庫,再談網頁設計會比較妥當。 資料庫規劃,建議您可採用流程為:

1、調查  

  1. 了解使用者所遭遇的問題及發生原因,通常須進行資料蒐集工作。  
  2. 定義系統任務及目標。  
  3. 確認新系統的功能及資料需求。  
  4. 確認系統限制及風險。  
  5. 決定專案範圍。  
  6. 找出所有可行方案,並進行可行性研究,找出最佳方案,並為最佳方案做成本效益分析。
  7. 撰寫可行性報告及專案計畫。   

2、需求分析階段  

  1. 問題分析。  
  2. 確認新系統應俱備的需求。  
  3. 撰寫需求規範書,並進行證實工作。

3、系統設計  

  1. 初步設計或結構設計。  
  2. 細步設計。  
  3. 撰寫設計規範書和做驗證工作。 

4、測試階段  

  1. 建立測試計畫。  
  2. 設計測試資料及期望結果。  
  3. 進行四階段測試 (單元、整合、驗收及系統測試 )。  
  4. 撰寫測試規範書。 

5、維護階段  一般可能進行以下四種維護:  

  1. 更正性維護。  
  2. 適應性維護。  
  3. 完善性維護。  
  4. 預防性維護。 
資料庫規劃完成後,接著asp.net或php、VB等來設計。

RegularExpressionValidato屬性:ValidationExpression

[]:定義可接受的字元
  1. [a-z]表示可接受a~z等26個英文小寫字母。
  2. [0-5],可 接受0~5個數字。
  3. [^ b-e]表示除了b~e之外,所有字元圴接受,(^符號為不接受的意思)。
  4. [abc]表可接受a,b,c三個小寫字母。
  5. [a-zA-z0-9]表可接受大小寫英文字母或數字。
{}:定義須輸入的字元數
  1. {3}表示須輸入3個字元。
  2. {1,3}須輸入1~3個字元。
  3. {n,}表接受n~無限多個字元。
  4. [A-C]{3}表必須輸入3個大寫字母。
  5. [a-zA-z0-9]{1,9}表可輸入1~9個大小寫字母或數字。
.:表任意的字元
  1. .{8}表可接受8個任意字元。
|:表「或」的意思
  1. [a-c]{1}[0-9]{2}表必須輸入a~c之間的一個小寫字母或2個數字。
():此符號可有可無,目的是為了方便閱讀
  1. ([A-B]) ([a-z])加了括號是不是比 [A-B] [a-z]更清楚看出 符號。
\:若可接受的字元中包含上述符號,則必須在特殊符號前加上\符號
  1. 可接受的字元包括[],則寫成 \[\] 。

TextBox自動轉大寫


多加入以下紅字部分
Style="text-transform: uppercase">
即可讓TextBox自動轉大寫!

JavaScript Events

http://www.comptechdoc.org/independent/web/cgi/javamanual/javaevents.html

Understanding ASP.NET View State

http://msdn.microsoft.com/en-us/library/ms972976.aspx Asp.net Page Life Cycle 技術文章

Javascript 事件觸發(Event Binding)的方式整理

Javascript 事件觸發(Event Binding)的方式整理

事件觸發(Event Binding)的方式 (註:紅色斜體字寫碼時自行替換) 1. Element Attributes [語法] <html> <head> <title>......</title> <script language="JavaScript"> <!-- function function-name(parameters) { ...... } // --> </script> </head> <body> <html-tag other-attributes event-handler="function-name(arguments);">......</html-tag> </body> </html> [說明] ‧利用 Element Attributes 的方式觸發定義在 <head> 區段內 <script> 標籤區塊內的 function。 ‧此種方式可藉由傳遞特殊的參數值(this 關鍵字) 給事件處理函數(event handler's function)。 [範例] <script language="JavaScript"> function convertToUpper(mytextbox) { mytextbox.value = mytextbox.value.toUpperCase(); } </script> ...... <FORM ....> <INPUT type="text" name="first_name" onChange="convertToUpper(this)"> <INPUT type="text" name="last_name" onChange="convertToUpper(this)"> ...... </FORM> 2. Object Properties [說明] ‧利用 script 程式碼將 event 與某個 element object 作連結。 ‧此種方式的 tag 屬性(attribute) 的狀態名稱(property name) 須為小寫字母,如 onmouseover(NN4 的狀態名稱可接受 interCap 方式)。 ‧當指派某個 function 參考到 event property,只須指定 function 名稱,function 名稱後不用接 () 括號和該 function 的定義。 [範例] document.forms[0].myButton.onclick = myFunc; 3. 利用 IE 的 <script for> [說明] ‧利用 tag 的 FOR 和 EVENT 屬性作事件連結(並非 W3C 制定的標準)。 ‧FOR 的屬性值設定與某 html 元件的 ID 值,然後在 EVENT 屬性值中設定所要觸發的事件名稱(onmouseover, onclick等)。 ‧此種方式的 script 程式碼並非定義在 function 內,而是定義在 <script> 標籤內。 [範例] <INPUT type="button" name="myButton" id="button1" value="Click Here"> <script for="button1" event="onclick"> ...... // script 程式碼 </script> [範例] <span id="testscript">Click me script block handler - JScript</span> <script language="JScript" for="testscript" event="onclick"> alert("script block handler - JScript"); </script> 4. 使用 IE5+ 的 attachEvent() 方式(只適用 IE5+) [語法] element-object.attachEvent("event-name", function-reference);    參數 event-name 的值為字串型態的事件名稱(event name),例如 onmousedown。    參數 function-reference 為因事件所觸發連結的 function,function 後不用接括號(),直接使用 function 名稱即可。 [說明] ‧利用 IE5+ 的 attachEvent() 方法可作事件觸發。 ‧此種方式的限制為:瀏覽器載入此 element's tag 前無法執行該 javascript 程式碼。因此此種事件觸發控制的程式碼通常寫在 html 文件的結尾處,或在 body 元件中利用 onLoad 函式指定事件觸發處理程式。 [範例] document.all.button1.attachEvent("onclick", myFunc); [範例] document.getElementById("button1").attachEvent("onclick", myFunc); 5. 指定 tag 的 id 值與事件關係(只適用 IE) [語法] function tag-id.event-name( ) { ...... }    或    function tag-id::event-name( ) { ...... } [說明] ‧IE 可直接利用設定 function 的名稱來觸發事件。 ‧function 名稱設定方式為「id名稱.事件名稱」或「id名稱 ::事件名稱」。 [範例] <span ID="sixties" >Hello World!!</span> <script> function sixties.onmousemove() { event.srcElement.style.color=Math.floor(Math.random()*16777216); } </script> [範例] <script type="text/JScript"> function window::onload(){ alert("Hello!"); } function window.onbeforeunload(){ alert("Goodbye!"); } </script> 6. W3C 制定的 DOM -- addEventListener() Method [語法] node-reference.addEventListener("event-type", listener-reference, capture-flag);    W3C DOM 制定的規格中,參數 event-type 為事件型態(前面不加"on"),例如 click、mousedown,和 keypress 等。    參數 capture-flag 為 Boolean 值(通常為false)-- 此方法稱為 event propagation。 [說明] ‧Netscape 6 採用 W3C DOM Level 2 的 event binding 機制,類似 IE5∕Windows 的 attachEvent() 函數。 ‧W3C DOM 在 DOM 的階層架構(hierarchy)下可指派每一 node 的 addEventListener()。 ‧當某個 html 標籤屬於 DOM node 型態時(包含在 element's tag 內的,如 text node),皆可做事件觸發。 [範例] 改寫 <body onload="dothis()"> 為跨 browser 寫法<script type="text/javascript"> if (window.addEventListener) { // DOM method for binding an event window.addEventListener("load", dothis, false); } else if (window.attachEvent) { // IE exclusive method for binding an event window.attachEvent("onload", dothis); } else if (document.getElementById) { // support older modern browsers window.onload=dothis; } </script>

WCF?

什麼是WCF

月底要上微軟的MOC2524: Developing XML Web Services.回頭看課本裡的內容都有點過時了. 現在微軟在分散式應用程式上推廣的是WCF: Windows Communication Foundation. 什麼是WCF.在網路上找到這些值得參考的文章.
  • SOA 與 WCF 原來如此
http://blogs.msdn.com/polo_lee/archive/2007/03/16/soa-wcf.aspx 這篇文章清楚地遻明 WCF 中 ABC 的概念.不錯!
  • Windows Communication Foundation Architecture: WCF 架構圖
http://msdn2.microsoft.com/en-us/library/ms733128.aspx 我喜歡看架構圖,一看就知道它的構成元素.
  • WCF 的Server端

可以是:
  1. Managed Application。像是Console應用程式。
  2. Managed Windows Services。若設為自動啟動,只要伺服器開機便會自動執行。
  3. Internet Information Services。很像Web Service的作法。
  4. Windows Process Activation Service(WAS)。這是Longhorn及Vista中新的行程啟動機制,這個機制其實是從IIS的行程模式(Application Pool)演化而來,但除了 TCP 之外多支援 MSMQ, Named Pipe 通訊協定,以便讓WCF的伺服端可透過更多方式啟動。
這個網頁中提供了一個比較表,比較這幾種Host方式的不同:http://msdn2.microsoft.com/en-us/library/ms730158.aspx
  • What Is Windows Communication Foundation?

這是微軟官方網站對WCF的介紹,你一定不可錯過。用一個租車公司的例子說明WCF的應用及其可解決的問題。 http://msdn2.microsoft.com/en-us/library/ms731082.aspx WCF仍舊是使用 XML 的SOAP做為資料的表示方式,為解決 XML 傳輸時的效能問題,可將 XML 用二進位的方式編碼。

何謂.Net Framework? CLR? BCL? MSIL? JIT?

廣義而言, .Net Framework 2.0包含了:

程式 → JIT → MSIL → CLR

1. CLR(Common Language Runtime)

2. BCL(Base Class Library--基礎類別程式庫)

3. 使用BCL來寫程式的程式語言(如C++.Net或VB.Net或C#.Net等等)

我想我們都很清楚了程式語言可以用來開發軟體(用.Net Framework開發好的軟體我們稱它為組件--Assembly), 之所以稱它為組件的用意我想很明顯, 在用BCL以及各種.Net Framework來開發的軟體過程中, 就像堆積木一樣(積木即BCL或.Net元件), 程式人員所作的工作就像創意家一樣, 發揮它的各種想像力和創造力, 堆積出各式各樣的組合積木出來(所以所開發出來的應用程式叫做組件--組件可以是 .exe 或是 .dll), 以下我們就各別的來看看以上所提到的三點。

1. CLR (Common Language Runtime) 相信有寫過JAVA程式的人一定都知道JVM (Java Virtual Machine)—Java執行時期的虛擬機器, 其實它也是JAVA軟體的一種Runtime Environment(簡稱Runtime), 其實用過VB6的人也都知道寫好的VB6要封裝時都會順便把VB6的相關執行時期DLL順便一起封裝進去, 那個就叫做VB6的Runtime Environment, 同樣的你寫好的VC++6程式, 要可以在客戶的機器上執行無礙, 也必須在客戶的電腦上在Setup時裝上必要的C++的相關DLL(那個叫做C++的Runtime), 各位試想用VB6寫就要自己的一套Runtime, 用VC++寫也要自己的一套Runtime, 而且用VC++寫的類別程式碼無法直接被VB6繼承來使用, 必須在VC++6中寫成DLL檔或COM元件來讓VB6呼叫使用, 造成使用VB6和使用VC++不同程式語言的人極大的隔閡與不便, 而且COM或COM+這樣高深的技術也只能讓初學者望COM而興嘆, 其實JVM本身是一個用來將程式語言和底層硬體分開的一種抽象層, 所以JAVA開發者它宣稱它可以寫一次然後可以到處跑(Write once and run anywhere), 亦即良好的跨平台特性, 說了這麼多, 其實CLR就像JVM一樣, 是一個用來隔開硬體的抽象層, 所以.Net的應用程式, 可以在Windows平台上執行無礙, 也可以在LINUX中順利地執行(LINUX下的CLR是由Open Source專案Mono所實作), 將來如果其他平台上的CLR實作也有了之後, 相信.Net程式要達到和JAVA一樣的跨平台特性就指日可待了。

2. BCL (Base Class Library) 在.Net Framework中亦提供了一組定義良好的類別庫可供程式開發人員使用, 就像以前在VC++6時代有一組MFC類別庫可供使用一般, 但是, 可別把.Net Framework BCL和MFC混為一談了, MFC算是棺材已經進了一半了, MFC有太多太多的缺點和歷史的包袱, .Net Framework BCL易學易用, 如果你已經掌握了BCL的使用訣竅, 日後你遇到新的BCL CLASS時, 所需的只是查閱MSDN的功夫而已, 真的是一點都不誇大。

3. 支援.Net的程式語言目前支援.Net的程式語言多不勝數, 最常聽到的就屬C#, VC++.Net, VB.Net, J#.Net或Delphi.Net等等, 雖然這些各種不同的語言擁有各自的程式語法, 如果你習慣Basic語法, 你就選VB.Net, 如果你還是新手, 那不妨選原汁原味的C#, 如果你用慣C++, 那你可以選C++/CLI (算是第二代的C++.Net), 如果你習慣Pascal語法, 你可以選Delphi.Net。總而言之, 不管你所選的是哪一種語言, 它們用的類別庫通通都是一樣的, 都是.Net Framework BCL, 更妙的是用C++/CLI寫好的CLASS可以給任何其他的.Net語言繼承過來使用, 當然要寫成DLL類別庫供其他的語言來呼叫也是可以的。

4. MSIL(Microsoft Intermediate Language) 咦, 記得前面筆者並沒提到MSIL啊, 啊, 那一定是筆者給忘了, MSIL叫做微軟中繼語言, 算是一種中間碼, 拿JAVA作比較, MSIL就類似JAVA的byte code, 這樣如果學過JAVA的大大就懂了, 在第3點中提到的各種.Net程式語言, 經過編譯之後, 通通都會變成MSIL, 它本身並無法直接執行, 所以在.Net機制中就透過JIT式編譯(Just In Time Compiling), 在MSIL被喚起執行時, 會被JIT編譯器翻譯成目的機器的原生碼(Native Code), 然後再交給CLR去執行。

.NET初學者的學習建議

無論是初學者或是已經有一般基礎的程式員,接下來我們列舉一連串的步驟,作為你學習.NET的參考。 1. 瞭解.NET語言:在你開始學習.NET之前,選擇一個語言,C#或是VB.NET,學習相關語法,例如迴圈,宣告等等,瞭解類別設計,OOP的基礎概 念,在你熟悉這些東西之前,不要去碰所謂的WinForm或是ASP.NET,當然,這是建議,如果你不覺得這會模糊學習焦點,如果你打算就語言本身下去 學習,從Console模式作練習。 2.探索基礎的.NET Framework類別庫:瞭解何謂命名空間,類別如何被組織歸納,如何引用現有的類別庫實作所需的應用程式功能,學習一些基礎的核心類,例如Math、Exception等等。 3.選擇所使用的UI:傳統的視窗應用程式(WinForm),或是Web應用程式(WebForm),也就是ASP.NET。 4.深入類別庫:學習特定領域的技術,例如資料庫的ADO.NET,繪圖技術的GDI+,網路與串流技術,甚至大型應用程式的發展等等。 .NET 程式設計師一旦過了初學的門檻,有一大部份的時間,都會在類別庫的類別功能上打轉,無論你所開發的是ASP.NET的Web應用程式員,還是傳統視窗應用程式,都脫離不了類別庫的應用,強化類別庫的知識將是最主要的課題。 以下為可參考之學習地圖: .NET 的架構設計得非常出色,因此很容易學習,按步就班很快的就會成為一個堪用的.NET應用程式開發人員,有了好的基礎,無論是目前的.NET3.0,或是明 年蓄勢待發的.NET3.5,對你都不再會是困擾,因為它們都只是堆疊了一些新的東西上去,只要在需要的時候,針對這些新增功能繼續下功夫即可,至於那些 新功能,我們用一些簡單的數學式來說明。 .NET 2.0 = CLR +BCL+ C#(VB.NET) + Win Form + Web Form .NET 3.0 = .NET 2.0 + WCF + WPF + WF + WCS .NET 3.5 = .NET 3.0 + ASP.NET AJAX +Silverlight+LINQ CLR = Common Language Runtime BCL = Base Class Libary 如 何,是不是比較好受了,從這幾條數學公式當中,我們得到了一個很重要的結論,如果沒有.NET2.0的基礎,你是不可能學好所謂的.NET 3.0,甚至迎接明年即將到來的.NET3.5,也因此,除非你已經準備好了,否則學好你的.NET 2.0 逺比關注目前的新技術來得重要。 至 於.NET 1.0或是.NET 1.1,試著擺脫它吧,.NET 2.0相較於.NET 1.X的改變儘管並非革命性的,但是.NET 2.0在某些方面的確作了一些變動,語言的功能亦作了不少的加強,編輯器的檔案架構同時也有一些不小的調整,跳到.NET 2.0是比較合適的選擇。