2012年5月28日 星期一

LINQ 學習筆記 (pre.2) 隱含型別宣告跟匿名型別 - var, Anonymous Type

繼上一章節,接下來討論,隱含型別宣告 var 。

這個東西在 .NET 發展以來,是一個很...不對盤的東西。該怎麼說,因為發展到 framework 2.0 以來,在型別一直就是採強型別的政策,怎麼會突然跑出這個東西出來,因為 var 的出現不就等於改走向型別不明確的那方面去....嗎?這時候一定要多個嗎...因為基於幾個方法幾乎就可證實。

2012年5月24日 星期四

LINQ 學習筆記 (pre.1) 擴充方法 - Extension Methods

LINQ ( Language-Integrated Query ) 是微軟在 C# 3.0 以及 VB9 之後發展的一套查詢技術,目的在試圖打破資料存取方式 (不是單指資料庫) 與程式溝通的界線。

以往程式需使用資料的時候,例如 SQL SERVER ,便需要利用到 T-SQL 語法,建立 Connection,搭配 Command 來進行資料的存取。中間需要將欲處理資料轉由 Command Text ,搭配  Parameters 以便控制資料庫。

而為什麼說不單指資料庫,因為 XML、EXCEL 等存取媒介也能由 LINQ 來進行資料的控制,這也是微軟想發展 LINQ 的原因之一。

而要發展 LINQ 也因此需要付出一些建置成本,也就是因應需應該有一些環境特性。所以引用In 91的文章。概念如下:

  1. var (隱含型別)
  2. 匿名型別
  3. 擴充方法
  4. yield、Iterator、IEnumerable、IEnumerator
  5. Enumerable與IEnumerable<T>
  6. Fluent Interface
  7. lambda (匿名方法)
  8. 一些特殊的委派型別 (Func<T>, Action<T>, Predicate<T>)
  9. 從foreach了解LINQ
  10. 延遲執行的特性

2012年5月22日 星期二

ASP.NET 顯示 Report Service 的報表(番外) - Web Service, Reporting Service

上次研究如何使用新版的 Reporting Service 2008 的時候,意外發現新版的疑似好像能用 Web service 的方式來叫用報表。所以繼上次的
以上這兩篇外,試著改用 Web Service 的方式來試試看,也促使這次番外篇的撰寫。

 首先要介紹一下麼是 Web Service ,最近看一篇文章,我覺得講得還不賴,所以就不再多做著墨。可以詳看這篇文章 webservice系列教學(1)


2012年5月21日 星期一

讓系統自動發送報表給使用者 - mail, window service, reporting service

最近遇到一個狀況。朋友的老闆希望每天都收到公司的帳務報表,且希望該報表能夠加密。
所以我朋友每天早上就很認命來公司產生完報表,匯出成Excel檔,然後加密,寄信給老闆。
即使生病請假或是想出去玩請假,還是得連到公司電腦,繼續上面的步驟。
便想到如何每天自動產生報表,然後自動加密,然後寄信。
所以就來試寫看看啦。

分析需求:
  1. 首先因為是常駐程式,總不能一直開著。程式的定位就是視窗服務 ( windows service )。
  2. 然後有用到寄信服務,也就是需要 SMTP 服務,所以建議 windows server 的環境。
  3. 因為有需要產出報表,需要有 reporting service (廢話) 。

2012年5月17日 星期四

利用泛型處理常式匯出報表 - ashx, reporting service

報表為了保護機密內容,報表伺服器通常需要做身分驗證。
有些報表有時需要直接產生 PDF 檔供使用者下載,且不太希望使用者自行用介面儲存成其他格式,所以並不會利用 Reportviewer 這個控制項。
這時可利用泛型處理常式來當作中介,自動完成報表伺服器且自動下載 PDF 檔供使用者使用。

2012年5月15日 星期二

利用XPath輕鬆使用XML - XmlDocument, XmlNode, XML

因為前陣子有朋友問我要怎麼讀XML檔案到自己的電腦,那時候腦袋馬上就浮現 DOM 物件跟利用 XPath 的字眼,隨口脫出,但是卻換來對方滿腦的問號,所以趁午休時間整理一下。

DOM ( Document Object Model ) 全名為文件物件模型。 這定義 威基 (Wiki) 裡面寫得很不錯。簡單地說,你可以想像一份 HTML 或 XML 等相關文件都是一種 DOM 物件,而文件裡的每個標籤(tag) 都是該物件中的一個節點 (node) 或是稱作元素 (element)。先前是利用 JavaScript 使用為主要大宗。因為最早期的瀏覽器大戰,就是以微軟以及 Netscape為爭取使用率,便積極開發各自的 JavaScript 因而促使 DOM 物件使用的成熟。

之後個語法也都有相關的 DOM 物件相關的使用 API ,除一開始的 JavaScript 外,PHP、 ASP.net 也都有陸續支援的 API 套件。

XPath (XML Path Language) 便是XML路徑語言,是一種用來確定XML文檔中某部分位置的語言。

2012年5月14日 星期一

Reporting Sevice 2005 無法在 IIS7 正常顯示 - IIS7 , reporting service 2005

最近遇到 Windows 2008 上要把之前開發在 Windows 2003 上的專案放上去。

一般網頁處理都能夠順利地轉移,但在有使用到 Reportviewer 控制項的網頁皆呈現無法使用的404畫面,表示找不到相關頁面。
經多方搜尋及尋找,大致整理出幾個方向,因 VS 2008 發展比 IIS 7 早,所以很多設定都只針對當時環境 IIS 6 所設計。

  • 開發環境為 Visual Studio 2008 
  • 網站架設環境為 Internet Information Services 7 ( IIS 7 )
  • 欲使用 Reportviewer 控制項

所引發問題,因為升級為 IIS 7 之後處理 ASP.NET的模式分為兩種:Classic Mode及Integrated Mode。然而現行網站處理都是直接使用 Integrated Mode 新的有向下相容的版本。而直接對應的 Web.Config 設定也因此除原本的 system.web 外多了 system.webServer。

2012年5月11日 星期五

ASP.NET 顯示 Report Service 的報表(二) - rdl, asp.net

上一章節,接下來就是利用到 VS 2010 來撰寫程式碼鏈結 Reporting Server 上的報表了。
也就是利用網站的網頁來直接鏈結呈現報表結果。
因為報表有些屬於隱私資料,所以在開發上要注意一些敏感性報表資料呈現是否合宜,例如機密資料就需先進行網站 Membership 的認證再進行網頁資料的呈現等等。

注意事項:

  • .NET FRAMEWORK 3.0 以下版本,請注意有沒有按裝支援 AJAX 的元件。
  • Reporting Server 的驗證是 Windows 帳密驗證非 SQL SA 等資料庫帳密的驗證。
  • 這次範例程式碼語言為 C#

ASP.NET 顯示 Report Service 的報表(一) - rdl, reporting server

有朋友問我如何在 asp.net 網頁上顯示 Report Service 的報表資料。
最近也剛好在試用 SQL 2008 R2 ,順便試著鏈結報表
首先,要先登入 Reporting Server 需要作 Windows 驗證,也就是需要 Windows Credentials
也就是需要一組 Power User 給報表使用。



準備事項:
  • .NET FRAMEWORK 3.0 以上 ( Reporting Server 2008 元件有利用到 AJAX擴充元件 )
  • Reporting Server 2008
  • VS2010 ( 開發IDE )

這篇將介紹鏈結報表的前置動作,也就是設定完整的報表伺服器以利網頁鏈結
也就是利用原的報表伺服器專案上傳至 Reporting Server 


1.登入 Reporting Server 進行設定,電腦按裝好 Reporting Server 後,開始瀏覽器鍵入以下網址,強烈建議以 IE7.0 以上進行設定及上傳,因微軟本身對其他瀏覽器支應程度並不高。

http://localhost/reports

2012年5月8日 星期二

暫時資料庫的用法 - Temp Table, WITH...AS

Temp Table
如果有時候會有需要臨時用到一個地方儲存資料的地方。
例如儲存未登入前的使用者習慣,直到登入後才寫入紀錄資料庫。
這時候就可以利用Temp Table來儲存資料庫。
Temp Table 全名叫做 Temporary Table
使用方法就是跟一般建立資料庫方法一樣,惟前面加上 "#" 字號
在連接 (Connection) 區間結束時,系統會自動將資料庫 Drop 掉。
不過在寫程式習慣上,還是希望在使用完畢使用 Drop 指令。

它的特點
  1. 儲存在主機記憶體中,存取速度較快,卻也耗費記憶體空間,不建議在大量使用上
  2. 如果有兩筆建立連線都使用一樣的名字,但彼此並不會互相干擾。
  3. 如果在預存程序中,會在建立的預存程序結束時才會自動 Drop 掉該暫存資料表,也就是中間如果有呼叫其他預存程序,其他預存程序也可以使用該暫存資料表。


2012年5月4日 星期五

Reporting Service 一些函數整理 - CountDistinct RowNumber CountRow

最近 Reporting Service 用很兇,所以會有一些感想。
原本計畫是用 Reporting Service 更新的 2008 版本。
但是實在太趕了,所以倉促之下,一些介面的變更等等,持續使用 2005 的版本。
不過就很好用啦,只是面對複雜的報表,支援度就沒那個高啦。

  1. 匯出Excel報表只支援一層子報表,巢狀就沒辦法顯示至第二層子報表。
  2. 2005 版本沒辦法像 2008 可匯出Word版本。
  3. 2005 也沒有LoopUp Function 可以查詢 DataSet 裡面的其中一筆資料等等。

然後最近比較常用到的幾個函式的紀錄一下來分享


2012年5月3日 星期四

Reporting Service BarCode自己做

最近被教務處追殺,一寫就是長達一年的系統,每天都是很精實在寫程式阿。
導致現在一整個就把我的小天地荒廢掉了。
剛好最近很常在用Reporting Service,然後最近有需要用到Bar Code
之前google不是灌字型就是引用別人的dll檔
然後專業的你分析一下。
  1. 灌字型:一整個就很不專業,人如果在外面,不就還要在別人的電腦灌字型後才能印報表。(一整個遜掉了)
  2. 別人的dll檔:不覺的人家把東西封裝起來的東西,就是...怕怕的,會不會傳一些資料出去。
所以...決定在自己的Reporting Service用.NET Framework的Drawing來畫畫啦。
首先,當然先準備以下東西
  1. .NET Framework 2.0以上版本(廢話)
  2. Reporting Service 2005 以上
  3. 沒了,沒錯以上兩個就好了!!
接下來就來一些基本的設定啦

第一步:當然是打開報表伺服器專案準備寫報表程式了
事前安裝設定可以參考這篇到第10步驟就可以繼續下去。