2011年8月11日 星期四

SQL CASE 的用法

CASE WHEN
欄位= ?
THEN '變成什麼值'
Else '' <--when沒找到的話就空白
End 結尾
as <--搜尋到的資料另建一個匿名欄位
SELECT Order_id, Conten_H1, Conten_H2, Conten_H3, Conten_View, CASE WHEN Conten_View = 1 THEN 'V' ELSE '' END AS Conten_View_show FROM Jsl_Index_Conten ORDER BY Order_id DESC

日期涵數使用

Response.Write(DateTime.Now.ToString("yyyyMMdd_HHmmss") + "
");

GridView、DatailsView、FormView 簡單說明

GridView
說明:提供表格格式,資料來源內容的表格視。每個資料行表示一個資料來源欄位,每個資料列表示一個資料記錄。可以使用樣版來自訂個別資料欄位,但是會被強制使用表格式表示的內容。可自訂項目的細微性是資料表諸存格。雖然使用一些辛苦的作業,可以變更資料表資料列之結構---例如,可以新增或移除儲存格。但是,很難可以再超過這些了。與其它檢視控制項似,在GridView也完全支援雙向資料繫結。

DatailsView
說明:設計用以表示單一紀錄得資料,則控制項會呈現出表格式具固定的版面配置。可以決定要呈現的欄位以及格式,可以使用樣版以自訂個別資料欄位的外觀,但不能變更整體表格基礎的版面配置。控制項支援就地編輯以及插入憘刪除,而具會向下至繫結的資料來源控制項之實際資料存取工作,只要基礎資料來源支援分頁和排序,控制項會讓這些功能透過自己的使用者介面來使用。

FormView
說明:

ListView 介紹

可以分頁、更新、插入及刪除、排序

ListView主要樣版 至少需要指定兩個才能編譯並使用ListView 不然會發生錯誤
必需要有樣版:LayoutTemplate和ItemTemplate

樣版介紹
AlternatingItemTemplate:表用示來呈現每○其它東結項目的板版,如果這個屬性未指定,所有項目是使用項目樣版來做一般的呈現。替代項目樣版通常包含與項目相同的控制項和內容,但不同的樣式以區分項目。

EditItemTemplate:表示用於編輯每個東局項目的板版,編輯樣版通常包含輸入控制項,用以更新東結資料記錄的值,編輯樣版也是應該包含按鈕來存,或捨棄變更。

EmptyDataTemplate:指示當資料來源東結至ListView控制項的空的時所呈現之樣版。當這種情況發生時,空白資料樣版會取代版面配置樣版而呈現,不過,請留意,如果InsertItemPosition未設定為 none,則 InsertItemTemplate會取得優先權。

GroupSeparatorTemplate:表示用來放置在ListView控制項中,每個群組之間自訂內容的樣版。

GroupTemplate:表示用於建立listView控制項,並排配置內容的樣版。在並排配置,一列中,項目水平重複數,是根據GroupItemCount屬性的值

InsertItemTemplate:指示用於插入新的資料項目的樣版。插入樣版包含輸入控制項,以收集資料來初始化新的資料記錄,插入樣版也應該包含按鈕來存,或捨棄變更。

ItemSeparatorTemplate:指示用於指定ListView控制項的項目之間分隔符號內容的樣版。

ItemTemplate:表示要使用來呈現控結至控制項的項目的樣版。

LayoutTemplate:表示呈現任何透過ListView控制項顯示的根目錄容器內容之樣版。這個樣版是必要的。

SelectdItemTemplate:表示用來呈現目前所選取的資料項目的樣版。

ListView 控制項是繼承:WebControl
少Auto樣式屬性設定,但他能輸方便被樣式化,套用css方法

另外觸發事件跟一般一樣有的功能

自訂按鈕:
Cancel
Delete
Edit
Insert
Page
Slect
Sort
Update

e.commandName取得按鈕名稱  會等於:Update,可以用if來判斷

整體來說:ListView是DataList加強版,透過繫結的資料來源重複,使用者定義的樣版
支援:資料雙向繫結、全完支援資料來源控制項
版面配置樣版定義資料項目周圍的標記,並提供開發人員有關於html標籤和css樣式,完全自由的控制,不提供任何樣式屬性,完完全全靠css樣式類別處理

ListView 介紹

可以分頁、更新、插入及刪除、排序

ListView主要樣版 至少需要指定兩個才能編譯並使用ListView 不然會發生錯誤
必需要有樣版:LayoutTemplate和ItemTemplate

樣版介紹
AlternatingItemTemplate:表用示來呈現每○其它東結項目的板版,如果這個屬性未指定,所有項目是使用項目樣版來做一般的呈現。替代項目樣版通常包含與項目相同的控制項和內容,但不同的樣式以區分項目。

EditItemTemplate:表示用於編輯每個東局項目的板版,編輯樣版通常包含輸入控制項,用以更新東結資料記錄的值,編輯樣版也是應該包含按鈕來存,或捨棄變更。

EmptyDataTemplate:指示當資料來源東結至ListView控制項的空的時所呈現之樣版。當這種情況發生時,空白資料樣版會取代版面配置樣版而呈現,不過,請留意,如果InsertItemPosition未設定為 none,則 InsertItemTemplate會取得優先權。

GroupSeparatorTemplate:表示用來放置在ListView控制項中,每個群組之間自訂內容的樣版。

GroupTemplate:表示用於建立listView控制項,並排配置內容的樣版。在並排配置,一列中,項目水平重複數,是根據GroupItemCount屬性的值

InsertItemTemplate:指示用於插入新的資料項目的樣版。插入樣版包含輸入控制項,以收集資料來初始化新的資料記錄,插入樣版也應該包含按鈕來存,或捨棄變更。

ItemSeparatorTemplate:指示用於指定ListView控制項的項目之間分隔符號內容的樣版。

ItemTemplate:表示要使用來呈現控結至控制項的項目的樣版。

LayoutTemplate:表示呈現任何透過ListView控制項顯示的根目錄容器內容之樣版。這個樣版是必要的。

SelectdItemTemplate:表示用來呈現目前所選取的資料項目的樣版。

ListView 控制項是繼承:WebControl
少Auto樣式屬性設定,但他能輸方便被樣式化,套用css方法

另外觸發事件跟一般一樣有的功能

2011年8月10日 星期三

虛擬錯誤


微軟的asp.net網頁都會預設進行Request Validation,但若是想規避這樣的內建行為。(建議仍要有其他的方法來防範XSS攻擊)

通常我們可以在.aspx中的Page Tag設定:
 <@Page Language="C#" validateRequest="False" >
或是直接對整個站台設定Web.Config中  下設定全域的


不過,假如你現在在ASP.NET 4.0 的環境下的話,就算進行上述的設定,可能仍會出現驗證失敗的訊息(潛在危險Request.QueryString的錯誤訊息)
因為ASP.NET4.0與2.0版本在請求驗證的定義上已經有所不同:

ASP.NET Request Validation

請求驗證是ASP.NET提供來保護XSS攻擊的一項功能
在先前的ASP.NET(ASP.NET 2.0)網頁,都是預設會進行網頁請求的請求驗證
僅會針對.aspx以及他們的class檔案進行驗證
不過到了ASP.NET 4.0,請求驗證範圍擴大到所有的請求
因為從BeginRequest階段就開始了HttpRequest
因此在這個期間任何的資源要求都會進行請求驗證
而非網頁檔案(.aspx)而已,還包含WebService呼叫以及自訂的http Handlers,都會去驗證http請求的內容
因此在ASP.NET 4.0下,可能在非網頁請求的情況下,仍會發生請求驗證錯誤的訊息
這時為了避免這樣的問題,一樣在Web.Config中 下加入下列語句
這樣就可以讓請求驗證只焦點在.aspx網頁上了。

其他關於ASP.NET 4.0 請求驗證的應用方法:Jimmy的部落格
<httpRuntime requestValidationType="Validate.MyRequestValidator" />

問題:不是有效的虛擬路徑

Server.MapPath()获得的是虚拟web路径的本地物理路径
example: 你有一个website,位置再 C:\website Server.MapPath(".")返回的是 “C:\website” 
你说,这个是虚拟路径嘛? website的虚拟路径应该是 http://localhost/website

2011年8月9日 星期二

驗證身份證字號的正確性


public string IDChk(string vid)
{
    List<string> FirstEng = new List<string> { "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "X", "Y", "W", "Z", "I", "O" };
    string aa = vid.ToUpper();
    bool chackFirstEnd = false;
    if (aa.Trim().Length == 10)
    {
        byte firstNo = Convert.ToByte(aa.Trim().Substring(1, 1));
        if (firstNo > 2 || firstNo < 1)
        {
            return "2";
        }
        else
        {
            int x;
            for (x = 0; x < FirstEng.Count; x++)
            {
                if (aa.Substring(0, 1) == FirstEng[x])
                {
                    aa = string.Format("{0}{1}", x + 10, aa.Substring(1, 9));
                    chackFirstEnd = true;
                    break;
                }
  
            }
            if (!chackFirstEnd)
                return "3";
  
            int i = 1;
            int ss = int.Parse(aa.Substring(0, 1));
            while (aa.Length > i)
            {
                ss = ss + (int.Parse(aa.Substring(i, 1)) * (10 - i));
                i++;
            }
            aa = ss.ToString();
            if (vid.Substring(9, 1) == "0")
            {
                if (aa.Substring(aa.Length - 1, 1) == "0")
                {
                    return "0";
                }
                else
                {
                    return "4";
                }
            }
            else
            {
                if (vid.Substring(9, 1) == (10 - int.Parse(aa.Substring(aa.Length - 1, 1))).ToString())
                {
  
                    return "0";
                }
                else
                {
                    return "4";
                }
            }
        }
    }
    else
    {
  
        return "1";
    }
}
//回傳1 代表字數不到10  
//回傳2代表第二碼非1,2  
//回傳3 代表首碼有誤  
//回傳4代表檢查碼不對