發表文章

Oracle使用函數及PACKAGE回傳資料集

圖片
前言:    今天在寫Oracle相關程式時,一時興起,研究一下如何使用函數或預存程序回傳 結果集,參考了底下2篇文章,是使用Package來回傳。 http://vongates.itpub.net/post/2553/24710 http://www.cnblogs.com/ipusr/articles/619759.html 什麼是Package PACKAGE是PROCEDURE、FUNCTION的集合,意思為2種都可以寫在裡面,再依條件叫用。 PACKAGE包含兩部份,一個為規格(宣告與變數)、另一為實作(BODY)。   PAGEAGE實作: 1.建立PACKAGE規格,宣告函數、預存程序、宣告變數,本例只使用函數 2.建立PACKAGE主體 3.程式如何取回資料集 上方的範例測試OK後,心想那直接用函數應該也行吧,所以再用了一個函數來測試後,果然也可以取回資料集。 函數實作: 1.建立函數,內容同上PACKAGE BODY內的FUNCTION寫法 2.程式如何取回資料集 最後…..撰寫工具也很重要,之前是使用AquaStudio去撰寫OracleSql,但寫函數及預存程序 都會出現語法錯誤的編譯,所以我改用由oracle提供的Oracle sql developer 目前是3.0.04.34 http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

檔案上傳超出限制的處理作法

圖片
老生長談...整理一下相關作法: 當你使用 FileUpload 上傳超過 4MB 的檔案時,可能會面臨無法上傳的問題。這是因為上傳內容 的長度超過了maxRequestLength 參數在 Machine.config 檔案所定義的預設上限值 4096 (4 MB),這個限 制是 ASP.NET 為了要預防可能的「拒絕服務」攻擊。你可以在 Web.config 檔案中,覆寫應用程式 maxRequestLength 的值,例如: 但是,只要上傳檔案超過 Web.config的maxRequestLength 設定,用戶端就會收到以下的錯誤訊息: 「無法顯示網頁:找不到伺服器或 DNS 錯誤」。如果你要在Page處理這個錯誤將會徒勞無功,因為這是屬於 Application 層級的錯誤,也就是 ASP.NET 早在執行你的網頁程式碼之前,就已經拋出「超出最大的要求長度」的例外。 比較好的處理方式自訂WebModule註冊BeginRequest事件處理常式,在檔案未上傳前,先檢查 HTTP 標頭內容的長度,如果超過 maxRequestLength 的設定値,便將用戶端重新導向導引到自訂的錯誤頁面或導回原來的網頁。程式如下 組態設定如下,須注意IIS6與IIS7有部分不同,IIS7的Module須放在System.WebServer內,並先將maxAllowedContentLength設大點 ,否則只要超出預設值4mb就連BeginRequest都不會觸發 上述的完成後,若你在VisualStudio上是無法成功導頁的,還是會出現反白畫面, 只能在IIS 或裝IS7.5 Express上測試此結果 部分內容引述: http://renjin.blogspot.com/2008/03/large-file-uploads-in-aspnet.html

如何使用aspnet_complier.exe讓網站第一個瀏覽變快

圖片
   前陣子User反應每天第一次執行某支程式都要等很久,本來一直以為是在資料第一次 載入Cache造成緩慢的問題,後來經測試後是因為該支程式的UI相當複雜,並使用 相當多的UserControl造成的。至於為何在第一次載入緩慢,這是因為在程式更新到網站後,是要等到網站的第一個使用者對該程式發出Request後,IIS才會將相關程式編譯成*.complier的副檔名檔案到 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\你的網站或虛擬目錄 以本例來說,就會產生很多*.ascx.complier的檔案而造成第一次要求的緩慢,而第二次執行後 就會飛快許多,但若你的網站只要bin底下的dll只要任何一個被更新過,那第一次編譯的動作就又要重來一次。 解決方法 使用aspnet_compiler來幫IIS對網站內的所有程式進行編譯。 Step1.在命令提示字元切換到對應的Framework版本目錄 Cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 Step2.編譯你的網站或網站底下的應用程式,底下為網站及應用程式的語法參考 a.編譯預設網站的虛擬目錄 aspnet_compiler -v /CLMWebv b.編譯-m對應路徑的網站,以下紅字5為網站的識別元,可以參考下圖的對應 aspnet_compiler -m /LM/W3SVC/ 5 /ROOT 執行完後你可以到Temporary ASP.NET Files 內查看對應的目錄,就會產生如下圖一堆看不懂的檔案XD ,這樣就大功告成囉 參考文章 http://msdn.microsoft.com/zh-tw/library/ms229863(v=vs.80).aspx

網站從IIS6.0移轉至7.0後除錯經驗-2

圖片
今天同事又遇到我自己也覺得奇怪的問題,執行程式出現不認得 System.web.extension的區段 網站也確認是使用Framework4.0,照理說4.0會繼承C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config 的設定,所以在自己網站ConfigSection是不用設定的,找了相關方法都無法 解決,最後索性將machine.config屬於System.web.extension的區段 Copy過來。 果然執行後就正常了,所以此篇....待更正確解答=.=

網站從IIS6.0移轉至7.0後除錯經驗-1

圖片
前言 將原本在Win2003的網站移至WIN2K8 IIS7.0後,出現的一些錯誤,排除方法整理如下: 錯誤1.httpModule及httpHandler要移至system.webserver底下 解決方法: 透過命令自動將組態作移轉動作,步驟如下 1.到命令提示字元 2.cd C:\Windows\System32\inetsrv 3.appcmd migrate config "Default Web Site/MyWeb" Ps:站台/應用程式名稱 錯誤2.ASP.NET尚未安裝或安裝不完整 由於網站的Frameowrk是使用4.0,所以我先到IIS的功能畫面進入IASPI及CGI限制看4.0是否有啓用 結果發現4.0雖已安裝但未進行啓用,如下圖 解決方法: 透過命令啓用4.0 1.到命令提示字元 2.cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 3.aspnet_regiis /ir,執行後如下圖 錯誤3.Module的Key重複 解決方法:在iis最上層的設定有UrlRoutinModule-4.0及ScriptModule-4.0 所以若網站是設在[預設的網站]的子應用程式,則需將此2個Module拿掉或更名

[WCF-REST]Cilent端叫用不使用服務參考

圖片
前言 WCF中的REST服務,最令我覺得特別的是Client開發端可以不用[服務參考],就可以直接透過Uri去作存取, 但麻煩的是Client端直接使用Uri叫用時就要知道要傳什麼樣的Url Format以及回傳什麼樣的格式(例:xml、json...) ,萬一服務端的設定改了,在Client是無法在設計時期知道的,如下範例 WCF端 Client:使用WebRequest取回Stream的資料並作反序列化回User物件 上述若WCF端改了參數,則Client端無法知道,當然你也可以使用[服務參考]產生WCF參考來解決,如下圖 而若你不想用[服務參考]的話,另外一種作法就是讓Clinet端也去實作與WCF服務相同的介面。 範例說明 1.專案架構 2.共用端程式,新增一個共用介面IMyWCF 3.WCF服務端程式,實作IMyWCF回傳使用者物件 WCF組態設定 4.Client端程式 透過實作ClientBase及共用層的IMyWCF來叫用WCF Client端組態設定 執行程式 寫的不清楚的地方、敬請見諒。 範例下載 http://cid-fab913153ae2ed86.office.live.com/self.aspx/.Public/Code/WCF/WcfRestSampleDemo.rar 參考文章 http://www.switchonthecode.com/tutorials/creating-a-rest-client-using-wcf http://www.dotblogs.com.tw/regionbbs/archive/2010/03/29/vs2010.wcf.4.rest.service.expose.aspx

前端Script如何存取SilverLight內的物件

圖片
功能:讓前端的Script可以即時與SilverLight應用程式作資料的存取互動 1.類別及屬性需加上Scriptable的Attribute

ReportViewer2008解決匯出PDF中文亂碼問題

這幾天客戶反應原本好好的匯出PDF功能,現在會變亂碼,瞭解實際情形後,才知客戶的環境是 Win7,此問題記得在Vista時也有遇過。 解決方式 1.報表字型要為標楷體 2.或者使用Vs2010 ReportViewer10也行。底下連結有介紹怎麼在Vs2008使用ReportViewer10 http://hoolihome.blogspot.com/2010/07/rdlc-pdf.html 上述的我選擇1,比較不會有環境的問題,不過我還是花了一天卡住解決不了問題, 因為同樣的字型在PRD 可以,在QAS不行,找了半天原來是QAS少了標楷體字型,所以我就到PRD將標楷體的字COPY出來 C:\WINDOWS\Fonts\kaiu.ttf 裝完後再重開機就ok了

ReportViewer在IIS7 無法顯示問題解決

圖片
這陣子內部有些網站要移到Win2008上,移植完後遇到ReportViewer無法顯示的問題,如下一片空白: 使用知名的網路監控軟体Fiddler2偵測後,發現ReportViewer的handler出現404Not Found Error 此時想到IIS6 與IIS7在Module及handler的區段是在不同的位置內 IIS6 <system.web>.. I IS7 <system.webserver>.. 解決方法: A.將原本<system.web>內的ReportViewerHandler搬過來,並加上name ps:iis7的handler需給name,如下: <add name="ReportViewer" path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" resourceType="Unspecified" preCondition="integratedMode" /> B.上述的handler若你在system.web找不到相關設定也可以在IIS上設定 a.在你的站台上找到[處理常式對應] b.新增ReportViewer的處理常式 c.新增後會自動寫入你的站台的組態設定,這樣就大功告成囉

[MVC學習心得]如何自訂Authorize

在MVC的 Action方法可以冠上Authorize的Attribute,並可以指定授權角色,來驗證使用者是否有權限執行 如:[Authorize(Roles="Admin")] 但若要動態指定Roles時, 則 會出現訊息 "錯誤 2 屬性引數必須是常數運算式、typeof 運算式或屬性參數型別的陣列建立運算式 " 程式如下: [Authorize(Roles=staticClass.GetCurrentRole())] Ps: staticClass.GetCurrentRole()),此方法是在依照DB的資料來指定權限 。   若想依照 DB 的資料來判斷權限,可以參考如下 1.新增一類別並繼承AuthorizeAttribute 並新增一自訂屬性PrgNo public class MyCustomAuthorizeAttribute : AuthorizeAttribute   /// <summary> /// 程式編號 /// </summary> public string PrgNo { get; set; } } 2.覆寫AuthorizeCore方法 protected override bool AuthorizeCore(HttpContextBase httpContext) { if (httpContext == null ) throw new ArgumentNullException( "httpContext" ); string [] users = Users.Split( ',' ); if (!httpContext.User.Identity.IsAuthenticated) return false ; //取得使用者的角色 FormsIdentity id = httpContext.Us...