2014年5月26日 星期一

SQL學習 - ROUND 對數值欄位值進行四捨五入計算

用法:
SELECT  ROUND(column_name, decimals)  FROM  table_name;

decimals用來設定要四捨五入到小數點第幾位,0表示個位數。

範例1:
SELECT ROUND(Price, 0) FROM orders;

範例2:
ROUND(125.315) would return 125
ROUND(125.315, 0) would return 125
ROUND(125.315, 1) would return 125.3
ROUND(125.315, 2) would return 125.32
ROUND(125.315, 3) would return 125.315
ROUND(-125.315, 2) would return -125.32





SQL學習- ISNULL 或 NVL 選擇性條件

遇到某一個要計算的欄位,資料裡有NULL或都有值,在計算時不加以處理抓出來幾千幾百筆一個一個在網頁程式判繼是NULL要怎樣,非NULL又無樣,效率會拖得很慢。

好在SQL可以先幫我處理這個部份,需求是如果是NULL,預設為100,非NULL以抓出來的值為主。

善用 ISNULL (MS SQL/T-SQL) 或 NVL (Oracle/PLSQL) 函式,它們的語法近似:

ISNULL(A, B)
NVL(A, B)

上面兩個式子,都代表著,若是 A 不等於 NULL,則傳回 A,否則傳回 B。

實際運用:

Select sum(ROUND(a.STIPEND_AMT * (NVL(a.DISCOUNT_RATE, 100) /100))) as STIPEND_AMT  From Pay_Emp a


2013年9月29日 星期日

MVVM 概觀

參考:
1.[Architecture] MVP, MVC, MVVM, 傻傻分不清楚~
MVVM 的架構一樣是 M, V 分離,但中間是以 VM (ViewModel) 來串接,這個 ViewModel 比較像是 View 的一個代理程式,它負責直接對 Model 做溝通,而 View 可以透過一些機制 (ex: Events, Two-way Databindings, ...) 來和 ViewModel 溝通以取得資料或將資料拋給 Model 做存取等工作,ViewModel 也可以作為和外部系統的代理程式,例如 Web Service 或是 REST Service 或是 Enterprise Services 等等,不過它和 MVC 不同的地方,就是 ViewModel 和 View 的黏合度比較高,因為 View 必須要透過 ViewModel 才可以取得 Model,而 ViewModel 又必須要處理來自 View 的通知訊息,所以雖然職責一樣分明,但是卻不像 MVC 那樣可以擴展到整個系統元件都能用。

ViewModel 最好是可以進行單元測試,這樣會更佳。

以下有幾個圖可以解釋MVVM架構:












2013年5月30日 星期四

C# HttpListener 範例

建立Console專案.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            HttpListener listener = new HttpListener();
            try
            {
                listener.Prefixes.Add("http://*:8055/"); //要監聽的URL範圍
                listener.Start(); //開始監聽端口,接收客户端請求
                Console.WriteLine("Listening");
                while (true)
                {
                    //獲取一個客户端請求為止
                    HttpListenerContext context = listener.GetContext();
                    //將其處理過程放入線程池(Pool)
                    System.Threading.ThreadPool.QueueUserWorkItem(ProcessHttpClient, context);
                }
            }
            catch (Exception e)
            {

                Console.WriteLine(e.Message);
            }
            finally
            {
                listener.Stop(); //關閉HttpListener
            }
        }

        //客户請求處理
        static void ProcessHttpClient(object obj)
        {
            HttpListenerContext context = obj as HttpListenerContext;
            HttpListenerRequest request = context.Request;
            HttpListenerResponse response = context.Response;
            //string s = request.QueryString["command"];
            //do something as you want
            string responseString = string.Format(" {0}", DateTime.Now);
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
            response.ContentLength64 = buffer.Length;
            System.IO.Stream output = response.OutputStream;
            output.Write(buffer, 0, buffer.Length);

            //關閉輸出流,釋放相應資源。
            output.Close();
        }
    }
}




2013年5月15日 星期三

Ext.Net 學習第一步


資料來源:http://extnet.tumblr.com/post/30985419252/ext-net-ext-net



安裝步驟 & 開始使用 如下:
1.安裝Visual Studio 2005,2008 or 2012 或
   Visual Web Developer Express 2005,2008 or 2010
如果未安裝的,可以裝Visual Web Developer Express 2010,是免費的,且使用上跟Visual Studio沒什麼差異。。
2.安裝.Net Framework 3.5以上版本
3.下載元件檔,可以至http://www.ext.net/download/下載你所要的版本
↓將下載回來的檔案解開來,我習慣開個asp.net 的資料夾放這些元件,待回兒會使用到
4.開啟專案如附圖
檔案→新網站→選擇ASP.NET空網站(空網站比較乾淨,不會有一些雜七雜八的…)
選擇的語言Visual C#(因為Ext.Net都是用C#寫的,所以選C#會比較好,Ext.Net的範例也都是C#,比較沒有轉換的問題)
當然,您要用vb也是可以使用的,但網路上的支援大部份都是C#…
↓加一個頁面進來
↓語言一樣建議是C#,選擇Web Form
這裡我不勾選將程式碼置於各別檔案中,為什麼?
主要是日後要在Ext.Net的討論區發問會比較方便,檔案結構也會比較簡潔….(不會拆成兩個檔.aspx及.cs)
5.將Ext.Net元件安裝到工具箱(只需安裝一次,日後新增的專案就不需要做這個動作了)
↑標籤命名為Ext.Net
↓接下來在Ext.Net按右鍵→選擇項目→.Net Framework元件→點瀏覽→
 選擇剛才解壓縮後放至本機的Ext.Net.dll檔→開啟舊檔
↓預設會勾選Ext.Net的全部元件,直接按”確定”,就ok了
↓元件已經加進來了
6.開始我們第一個Ext.Net的頁面吧
要使用Ext.Net,第一件事,就是加上ResourceManager,不然會有err
↓將元件ResourceManager拉至你的頁面
當你拉好後,你會發現你的方案總管就會自動出現bin目錄,跟一些dll檔
↓接下來測試拉個Window並Run看看吧~
第一次會出現是不是要出現除錯訊息,因為還沒有要放到server上,就按確定就可以了
↓Run的時侯會出現Web.config要設定的訊息
↓我們把這一段設定加上,再重新Run一次看看吧
↓很感動的,我們完成第一隻Ext.Net的程式了
是不是很沒Feel?
你們可以到http://examples.ext.net/找Code,貼到剛才的.aspx上玩看看喔
The End…

2013年3月25日 星期一

[C#] 刪除1天前某個目錄的檔案

            //刪除1天前某個目錄的檔案,減少temp檔佔用空間
            try
            {
                string TmpRootPath= @"C:\temp";
                DirectoryInfo TempInfo = new DirectoryInfo(TmpRootPath);
                FileInfo[] TempArray = TempInfo.GetFiles();
                if (TempArray.Length > 0)
                {
                    for (int i = 0; i < TempArray.Length; i++)
                    {
                        string TempFileName = TempArray[i].Name;
                        DateTime dtTempFileEditTime = TempArray[i].LastWriteTime;
                        TimeSpan ts = DateTime.Now - dtTempFileEditTime;
                        int differenceInDays = ts.Days;
                        if (differenceInDays > 1) File.Delete(TmpRootPath+ TempFileName);
                    }
                }

2012年10月12日 星期五

2012年9月27日 星期四

css下拉式選單被圖蓋掉


用CSS執行下拉式選單,可以參考範例:

1.[CSS]純CSS實作觸碰下拉式選單並適用各瀏覽

2.超贊的純CSS實現的簡約下拉式功能表

實作後,會發現展開下拉選單時,若下方有圖片會被蓋掉,
這時後請修改CSS檔,將選單外圍容器加上  position:relative z-index:99 即可。


2012年9月12日 星期三

Telerik Extensions for ASP.NET MVC Open Source Project


在學習網頁設計的時後,有一些高手已經做好的元件可以用。
Telerik Extensions是受到好評的套件,可以用NuGet下載並安裝套件喔!

Telerik Extensions 的範例介紹
http://demos.telerik.com/aspnet-mvc/razor

這邊是高手的分享,如何將Telerik Extensions 套進你的專案使用呢? 看這邊:
http://blog.darkthread.net/post-2011-06-05-telerik-ext-for-asp-net-mvc.aspx


2012年9月4日 星期二

SQL Server - 無法連接到 (local)

原本 SQL Server 2008 R2 在連線是正常的,後來安裝了 SQL Server Express 後,或許設定跑掉了,我想再登入SQL Server 2008 R2 就出現以下錯誤:



標題: 連接到伺服器
------------------------------

無法連接到 (local)。

------------------------------
其他資訊:

建立連接至 SQL Server 時,發生網路相關或執行個體特定的錯誤。找不到或無法存取伺服器。確認執行個名稱是否正確,以及 SQL Server 是否設定為允許遠端連線。 (provider: 具名的管線提供者, error: 40 - 無法開啟至 SQL Server 的連接) (Microsoft SQL Server, 錯誤: 2)

如需說明,請按一下: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=2&LinkId=20476

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


解決方法: 至 控制台 \ 系統管理工具 \ 服務 ,將SQL Server及SQL Server Agent服務啟動即可。




iOS 應用程式的沙箱機制


在操作的過程中經常需要取得目前應用程式的資料夾路徑,接下來就簡略地介紹 iOS 的應用程式沙箱機制,以及如何取得沙箱中的資料夾路徑。
在 iOS 系統中,出自於安全性的前提下,應用程式採用了沙箱 (Sandbox) 安全體系的運作機制,當應用程式被安裝到 iOS 系統時,系統會替應用程式建立一個主目錄 (Home Directory),以應用程式的 GUID 來命名,這個主目錄便是應用程式本身的 Sandbox,應用程式被限制僅能存取自己的 Sandbox,無法任意地使用其他應用程式 Sandbox 中的資料,如有需要時必須發送數據請求並經過權限的檢測認可,無法通過檢測則請求會被中斷。

沙箱 (Sandbox) 機制的幾項特點

  • 每個應用程式都有屬於自己的儲存空間
  • 應用程式無法存取其他應用程式的儲存空間
  • 應用程式送出的請求數據必須通過權限的檢測,若無法通過時則請求會被中斷。

沙箱結構

一般而言,沙箱中會有下列四個子資料夾:
²  AppName.app
應用程式主目錄,所有與應用程式建置時有關的檔案都存放於此資料夾中,包括應用程式本身的執行檔及相關資源等等,僅允許讀取不可修改。又稱應用程式的程式包。由於應用程式在安裝時必須經過簽名認證,所以在運行時不能對這個資料夾中進行任何內容的修改動作。
²  Documents 
這個資料夾用來儲存使用者的資料或其他應定期備份的資料,因此在應用程式運行時需要使用的檔案都應該被儲存於這個資料夾中
²  Library
此資料夾中包含兩個子目錄,分別是:
Ø   Caches 
用來儲存應用程式專用的文件,例如保存應用程式再次啟動時需要的快取資料
Ø   Preference 
儲存應用程序的偏好設置文件,應用程式不應該直接於此資料夾創建偏好設定文件,而是透過 NSUserDefault 類別來取得與進行偏好設定文件的操作
²  tmp 
用來儲放臨時檔案的資料夾,保存應用程式再次啟動時較不需要的快取資料。當 iOS 裝置與 iTuens 進行同步時,iTunes 不會將存放於 tmp 資料夾中的檔案進行備份。
若是應用程式中使用了 tmp 資料夾做些檔案的暫存動作,務必記得自行清除不再使用的檔案,避免 tmp 資料夾中的垃圾檔案佔據了使用者的儲存空間。

如何取得沙箱中的資料夾路徑

前面已經簡單地介紹完 iOS 沙箱機制,接下來的重點便是我們要如何去取得沙箱中的資料夾路徑,畢竟操作檔案文件前的先決條件是我們必須得知道檔案路徑在哪裡,才有辦法進行後續的存取動作。
    // 取得應用程式根目錄資料夾路徑
    NSString *homeDirectory = NSHomeDirectory();

    // 取得 AppName.app 程式包路徑
    // - 直接從 Info.plist 屬性清單中 "NSBundleInitialPath" 鍵值直接取得應用程式的程式包路徑
    NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];     // 取得 Info.plist 屬性清單
    NSString *appFilePath = [infoDictionary objectForKey:@"NSBundleInitialPath"];

    // 取得 Documents 資料夾路徑
    NSString *documentsDirectory = [homeDirectory stringByAppendingPathComponent:@"Documents"];

    // 取得 Library 資料夾路徑
    NSString *libraryDirectory = [homeDirectory stringByAppendingPathComponent:@"Library"];

    // 取得 Caches 與 Preference 資料夾路徑
    NSString *cachesDirectory = [libraryDirectory stringByAppendingPathComponent:@"Caches"];
    NSString *preferenceDirectory = [libraryDirectory stringByAppendingPathComponent:@"Preference"];

    // 取得 tmp 資料夾路徑
    NSString *tmpDirectory = [homeDirectory stringByAppendingPathComponent:@"tmp"];

2012年8月31日 星期五

很多css樣板的網站



對於網頁設計有興趣的朋友
可以到網站去下載css樣式表回去做參考




http://www.freecsstemplates.org/css-templates/

[ASP.Net MVC] ViewBag、ViewData 和 TempData 的區別


ViewData 和 TempData 都可以傳遞弱類型資料,區別如下:
ViewData 只在當前 Action 中有效,生命週期和 View 相同;
TempData 的資料至多只能經過一次Controller傳遞,並且每個元素至多只能被訪問一次,訪問以後,自動被刪除。
TempData 一般用於臨時的緩存內容或拋出錯誤頁面時傳遞錯誤資訊,可以將TempData 在使用之前存儲到相應的 ViewData 中以備迴圈使用。

Index
public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";
    ViewData["myName"] = "
我的名字";
    TempData["myAgeOne"] = "26
歲";
    TempData["myAgeTwo"] = "27
歲";
    return View();
}
姓名:@ViewData["myName"]
<br />
年齡1:@TempData["myAgeOne"]

Index網頁呈現如下:



About
姓名:@ViewData["myName"]
<br />
年齡1:@TempData["myAgeOne"]
<br />
年齡2:@TempData["myAgeTwo"]



ViewBag.Name=ViewData["Name"];
相同:使用同一個字典集合(資料來源)
不同:ViewBag 是 MVC3 新增語法,ViewBag 不再是字典的鍵值對結構,而是 dynamic 動態類型,它會在程式運行的時候動態解析。不過 ViewBag 雖然說因為 dynamic 的特點,在使用時可以不用類別轉換,但也因為這樣,在速度上是會比 ViewData 慢一些。

Dynamically Typed Object 動態類型
C#4.0加入了dynamic關鍵字,可以申明一個變數的static類型為dynamic。
使用dynamic的好處在於,可以不去關心物件是來源於COM, IronPython, HTML DOM或者反射,只要知道有什麼方法可以調用就可以了,剩下的工作可以留給runtime。
參考資料

2012年8月30日 星期四

[ASP.Net MVC] 電腦同時存在VS2010和VS2012的問題


我的電腦先後都安裝了VS2010和VS2012,如果在VS2010新建MVC3 的專案,執行後會出現以下問題:

'C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v2.0\Assemblies\System.Web.WebPages.dll' 和 'C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll' 兩者中都有型別 'System.Web.Mvc.ModelClientValidationStringLengthRule' K:\Learning\Microsoft\MVC\Test Porject\OrdToFood\OrdToFood\Models\AccountModels.cs

Google後的解決方法:

1. 在Web.config檔裡,新增<appSettings>的設定,Webpages:Version為1.0.0.0.

<appSettings>
    <add key="webpages:Version" value="1.0.0.0"/> 
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>


2.在方案總管中,在專案名稱上右鍵選擇「卸載專案」,再重覆在專案名稱上右鍵選擇「編輯ProjectName.csproj」

   在裡面找到這兩行的參考字串:
<Reference Include="System.Web.WebPages"/> 
<Reference Include="System.Web.Helpers" />

  用下列的設定取代上面的字串:

<Reference Include="System.Web.WebPages, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL "/> 
<Reference Include="System.Web.Helpers, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

3.然後,儲存ProjectName.csproj之後,再把專案掛載回來就okok啦!


[ASP.Net MVC] 應使用 IIS Express 進行開發與測試

IIS 7.5 Express 是一套針對 ASP.NET 開發人員特別設計的 IIS 7.5 版本.

 Visual Studio 2010 SP1 已經正式將 IIS Express 整合進 Visual Studio 2010,也代表著在 Visual Studio 2010 裡面的網站專案都可以方便的指定使用 IIS Express 來執行網站。

一般沒有特別注意有這個東西的時後,我一般都是使用Web Development Server 來進行測試,不過這和部置至IIS上會有一些問題產生,尤其是IIS7以後的版本,所以,專家都建議用IIS 7.5 Express 喔!

專家的建議:




ASP.Net MVC – Razor的@helper 及 語法

在Razor的寫法裡,有很方便的@helper 及 @functons 語法,竟然有什麼好處呢?

@helper 是指預先編譯,會讓第一次網站執行時比較快速外。
有時後View需要做一些動作,剛好這個動作就是很多View會用都的,我們就可以考慮用@helper的方法來寫。

例如,View或許會重覆用到引用script的寫法,若要弄成一個共用的method,只要傳入script name即可,我們可以這樣做:

原本 Index.cshtml 是長這樣:


在 Index.cshtml 裡我新增 @helper Script(string scriptName) ,這個意思就是可以把。Script這個Method放入 @helper 裡面,以後要用Script這共用的方法時,只要@Script 就可以了喔!



以上的方法只有Index.cshtml可以自己用的很爽,但不能給其他的View共用。要怎麼辦呢?

在方案總管那新增App_Code目錄,再新增項目中選 Razor檢視頁面的型態。





在新增的Content.cshtml裡,先刪掉原有的預設tag,再把  @helper Script(string scriptName) 的內容移到Content.cshtml裡。


Index.cshtml在使用的時後,必須小改一下,只要改入App_Code目錄下的Content.cshtml的檔名即可。像這樣:



真是太好了,這樣大家就可以用了喔!

至於 @functons 只是有一點點不一樣,可以參考Razor 學習筆記 - @functions 和 @helper

這裡還有更多大師的教學喔!

HTML5 學習資源




這裡有一些HTML5 的版型。


2012年8月29日 星期三

[ASP.Net MVC] 與Ajax的運用


AjaxHelper 類別包含的方法可提供 MVC 應用程式內 ASP.NET AJAX 中的用戶端功能,例如,建立非同步表單和呈現連結。 AjaxHelper 類別支援非同步部分頁面更新。 AjaxHelper 類別的擴充程式位於 System.Web.Mvc.Ajax 命名空間中。

我有練習以下兩個比較基本的教學,都可以成功喔!



在MVC的語法上使用 @Ajax 是引用AjaxHelper 類別。
常用的方法有 :

  1. ActionLink :已多載。 傳回錨定項目,其中包含指定之動作方法的 URL;按一下動作連結時,系統便會使用 JavaScript 以非同步方式叫用該動作方法。 
  2. BeginForm :將開頭的 <form> 標記寫入至回應。
  3. GlobalizationScript :傳回 HTML script 項目,其中包含定義文化特性資訊的全球化指令碼參考。
  4. RouteLink :已多載。 傳回錨定項目,其中包含指定之路徑值的虛擬路徑;按一下連結時,系統便會使用 JavaScript 以非同步方式對該虛擬路徑提出要求。


在View/Shared/_layout.cshtml檔案裡加上引用MicrosoftAjax.js及MicrosoftMvcAjax.js

AjaxController的寫法。PartialViewResult 是提供給 Ajax呼叫的進入點,將會回傳一個表單。PartialView("_IndexPartial", result) 會以部份檢視的方式呼叫 View/Ajax/_IndexPartial.cshtml 。

主頁 Index.cshtml。Ajax.BeginForm的寫法就是將整個表單丟給Server去處理的寫法。要指定UpdateTargetId,之後Ajax得到回覆後,會動態載入新頁面至 <div id="targetDiv" ... 的位置上。

動態載入的部份頁面 _IndexPartial.cshtml 。若是內部呼叫的頁面,可以加底線區分。


執行的結果就如同範例一樣,網頁不需要Refresh就可以動態載入下方的資料。


2012年8月28日 星期二

[ASP.Net MVC] 部署問題 - 使用者 'IIS APPPOOL\ASP.NET v4.0' 的登入失敗


繼上篇 MVC 網站部署的基礎篇之後,雖然首頁沒有問題,但只要有連資料庫的動作卻會出現-"使用者 'IIS APPPOOL\ASP.NET v4.0' 的登入失敗" 的問題。



還記得我們在IIS設定應用程式集區嗎? 從ASP.NET 4.0 (v4.0.30319) 的進階設定進去,可以找到「識別」為ApplicationPoolIdentity, 這是虛擬帳號,所以我們網站是沒有權限可以存取資料庫和寫入檔案。



當 ASP.NET 網頁程式需要寫入磁碟檔案時,就必須讓該帳戶具有寫入檔案的權限,方法有兩種:

1.指定的帳戶名稱:
    參考:http://bennyy1256.blogspot.tw/2012/03/iis-apppoolaspnet-v40.html

2.在 IIS更改ASP.NET 4.0 應用程式集區的「識別」為帳密方式。

  • 選自訂帳戶: (這裡我是用window登入的帳密)

  • 確定後,識別為有效的帳號:



這樣就完成了喔!

如果部署還有其他問題,可以參考以下網站:

ASP.NET 4 MVC 2 佈署到 IIS 7.5 問題 (1)






[ASP.Net MVC] 網站部署 - 基礎

參考資源:


1. 先至「開始或關閉Window功能」將「IIS管理服務」打勾。


2.至「控制台\所有控制台項目\系統管理工具\ IIS 管理員」新增網站。

   2.1 確定應用程式集區裡的 ASP.NET 4.0 (v4.0.30319)被啟動
  • 這有有一點要提醒:請務必註冊 ASP.NET 4.0 (v4.0.30319,如果是在 .NET Framework 4 安裝後才安裝 IIS 的,請記得執行 %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -ir,若是 32 位元則是 %WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -ir)。
  • 應用程式集區 - 確定  ASP.NET 4.0 狀態為"已啟動"。 


   2.2 裡站台裡新增網站:
  



  • 在C:\inetpub先建好MvcDemo的目錄。
  • 應用程式集區的版本,請使用ASP.NET 4.0 (v4.0.30319)。
  • port不要和其他的網站衝突即可。



3.  用系統管理員身份執行 VS 2012,開啟你已開發的MVC網站專案。方案總管中於專案名稱按右鍵執行「發行」。

  • 假設我們是新部署的網站,必須新增,只要新增過一次後,發行設定檔的清單會存有紀錄,下次只要選用即可。
  • 發行方法:檔案系統 ( 發行時必須將程式copy至主機發行)
  • 目標位置:和剛才新增網站的實體路徑相同。
  • 目的地URL:一樣是參考在IIS新增網站的資料。http://主機名稱 : 連接埠。

    發行後的結果: 耶~ 成功了!



這是基本的發行步驟,沒有遠端發行,目前我用VS2012  發行方法為 Web Deploy ,都一直失敗,所以發行方法先以檔案系統為練習。

下篇再來研究與資料庫的部署....