發表文章

目前顯示的是 2009的文章

實作HttpModule代替Global.asax 處理各項事件

實作HttpModule可以取代Global.asax,來處理Request_start、Session_Start 或Application_Error等事件的處理。看到這裡會有點疑問吧,既然兩者都一樣為何要使用HttpModule呢? 它的優點在於不必和整個網站挷在一起,不需使用時可以直接在組態檔拿掉。本例以當網頁發生錯誤時要作該事件的處理實作步驟1.新增類別並實作HttpModulenamespace Kim.Web
{
publicclass ErrorModule : IHttpModule
{
#region IHttpModule 的介面方法

publicvoid Init(HttpApplication application)
{

//註冊只要網頁發生錯誤的事件處理
application.Error += new EventHandler(application_Error);

}

publicvoid Dispose() { }
#endregion
publicvoid application_Error(object sender, EventArgs e)

{
//主要程式處理

}
}
}



2.在網站註冊ErrorModule

<httpModules>

<addname="ErrorModule"type="Kim.Web.ErrorModule, Kim.Web"/>

</httpModules>

說明:type="命名空間+類別名稱,組件名稱(Kim.Web.dll)"
參考網址
http://codebetter.com/blogs/karlseguin/archive/2006/06/12/146356.aspx

如何抓取使用者的瀏覽器語系設定

圖片
我的瀏覽器原來的設定是中文台灣,現改為如下圖

透過程式將上圖的設定值顯示出來Response.Write("使用者瀏覽器的語系:<br>");for (int i = 0; i < Request.UserLanguages.Length; i++){Response.Write(string.Format("{0}<br>", Request.UserLanguages[i]));}顯示如下:

.net說明文件產生器

圖片
一、安裝 Sandcastle
首先安裝微軟的 Sandcastle - Documentation Compiler for Managed Class Libraries http://www.microsoft.com/downloads/details.aspx?familyid=E82EA71D-DA89-42EE-A715-696E3A4873B2&displaylang=en 二、安裝 Sandcastle Help File Builder 製作HELP 文件,具 UI 界面的工具 http://shfb.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=18639 三、製作 HELP 文件

實作ConfigurationElement

一般來說我們若有某些共用的屬性是供全域使用的話會在組態檔增加一個Appsetting設定例:ConfiguationManager.Appsetting["test"] 但此種寫法,僅適合單一值,若此設定需設定多個欄位值的話,我們可以藉由實作ConfiguationElement來實現

Const 變數與Static readonly的不同

假日在家看書(Java語言),在使用staticfinal變數時,可以使用針對該變數使用Switch{}陳述式,但使用C#的staitc readonly時卻無法使用,錯誤訊息為[必須為常數值const]。為此我看了msdn作一下小研究, const與static readonly都是唯讀變數,系統啟動時就存在,其生命週期等同Application變數。常數const在宣告時就必須初始它的值且是固定不可變的,而static readonly則是宣告時不強制初始值,但既然已經宣告作readonly之後當然也不能再給值,所以一般若宣告static readonly時一定會給初始值,不過其初始值是可變的。程式碼比較如下:constint delayMonth=1;//正確constint delayMonth=DateTime.Now.Month;//錯誤
因為DateTime.Now.是可變的例如:本月是7 下一個月是8,常數必須是一個明確的固定值而不是隨著外在因素變動。

staticreadonly int delayMonth=DateTime.Now.Month;//正確初始值是可變的

由上述的兩個特性作比較的話switch的陳述式比須針對不可變動值才能作case的動作,所以static readonly並不適用,只能使用const變數。

參考
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.cht/dv_csref/html/79eb447c-117b-4418-933f-97c50aa472db.htm

如何使用#if(debug)

圖片
在程式開發時,我們有時會遇到需要在客戶主機的環境才可以測試某段結果,
此時會我們寫一段測試程式在客戶端執行,等執行結果是ok的話才會將此程式拿掉,再布署一次…...,但這樣是不是很麻煩呢? 我們可以利用#if(debug) 幫我們解決上述問題如下程式碼: #if(DEBUG) Response.Write("test………."); #endif
上述的程式只有在組態檔<compilation debug="true">才會執行, 所以可以在測試將它設為false 正確再改為true 2011/04/17 更正,如下圖是以建置的組態來判斷

類別與結構的分別

一直以來雖然對類別與結構分別有基本的瞭解,但有人問我差異是在哪時,我又說不太出個所以然...所以花了點時間閱讀讀一下msdn的文章study一下 以下是結構的應用
結構與類別所使用的語法幾乎相同,不過結構的限制比類別多: 結構宣告內不能初始化欄位,除非將其宣告為 const 或 static。 結構不可宣告預設建構函式 (沒有參數的建構函式) 或解構函式。
結構為實值型別,而類別則是參考型別。與類別不同的是,結構不需使用 new 運算子就能執行個體化結構可以宣告建構函式,但是必須採用參數結構無法從另一個結構或類別繼承而來,且它不能成為類別的基底。所有結構都是從繼承自 System.Object 的 System.ValueType 直接繼承而來結構可實作介面結構可以用來當做可為 Null 的型別,而且可以對其指派 null 值。

SQLDataSource連結非SQLServer資料庫

若有使用到SQLDataSource,連結的資料庫通常都是SQLServer 但若有一天客戶的需求是要連結到不同的資料庫(如:Oracle,Informix)怎麼辨呢?
Don't Worry...只要在組態檔設定如下即可解決囉
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
  ConnectionString="<%$ ConnectionStrings:FormConnectionString %>"
            ProviderName="<%$ ConnectionStrings:FormConnectionString.ProviderName %>" SelectCommand='SELECT * FROM "PJSUBPJ"'>
        </asp:SqlDataSource>
    <connectionStrings>
        <add name="FormConnectionString" connectionString="Data Source=oracle9i.systemlead.com;Persist Security Info=True;User ID=caita;Password=caita;Unicode=True"
            providerName="System.Data.OracleClient" />
    </connectionStrings>