2016年1月13日 星期三

ASP.NET隨手筆記

ASP.NET 主版頁面可以讓您在應用程式頁面中建立一致的配置樣式。單一主版頁面會定義應用程式中所有頁面 (或頁面群組) 的外觀和標準行為。然後,您可以建立包含想要顯示內容的個別內容頁面。當使用者要求內容頁面時,它們就會跟主版頁面合併,以產生結合主版頁面配置與內容頁 面內容的輸出。
http://www.dotblogs.com.tw/rab/archive/2012/02/28/.net-masterpage-nestedmasterpage.aspx
Master Page,讓網頁設計師可以採用視覺編輯的方式設計網站中每一個網頁欲套用的樣版,再套用到網站中每一個網頁,達到風格一致的效果,縮短網頁的設計和維護的時間,提升網頁開發的生產力

.NET framework
NET Framework 是建置 Windows、Windows Phone、Windows Server 和 Microsoft Azure 應用程式的開發平台。
這是由通用語言執行平台 (CLR) 和 .NET Framework 類別庫 (包括支援各種技術的類別、介面和實值類型) 所組成。
.NET Framework 提供了受管理的(managed)執行環境,簡化了開發和部署,並與多種程式語言整合

記憶體管理
一般類型系統
大量類別庫
開發架構和技術
.NET Framework 包含特定應用程式開發領域所需的程式庫
Web 應用程式所需的 ASP.NET
資料存取所需的 ADO.NET
服務導向應用程式所需的 Windows Communication Foundation

語言互通性
版本相容性
並存執行

多目標

2016年1月11日 星期一

資料庫概念隨手筆記

Transaction
     commit
     全部sql執行成功將結果交給資料庫
     rollback
     其中一個sql執行失敗就必須還原全部動作

ACID
     完成姓A
     異動執行若非全部認可就是全部失敗
     一致性C
     遵守資料庫強制的規定,否則錯誤
     隔離性I
     異動執行不允許查詢
     耐久性D
     異動完成資料無法馬上變更

B-tree
     多欄位索引
定義除了繼承二元樹的定義外,二元搜索樹本身也有額外的定義,但可能會看到幾種不同的說法,而較多數人使用的定義如下:
  1. 左子樹不為空,則左子樹的所有節點的鍵值(Key)小於根節點的鍵值。
  2. 右子樹不為空,則右子樹的所有節點的鍵值(Key)大於根節點的鍵值。
  3. 左右子樹也都是二元搜索樹。
  4. 節點不會有重複的鍵值。
這個定義是樹中的節點都具有Key-value pair情況,有時候可能會其他變化:
  1. 沒有鍵值,而用值(Value)來比較。
  2. 允許重複的資料,此時會出現等於的情況,則將定義1.改成小於等於或者定義2.改成大於等於。

unique
不允許重複值,也就是唯一值
primary
     不能為空值,也就是主鍵值

正規化

1.  第一 : 同一欄位不能有一筆以上的資料(單一值)    
錯誤:
交易
顧客日期數量
PeteMonday19.00
-28.20
PeteWednesday-84.00
SarahFriday100.00
150.00
-40.00

正確:
 
交易
顧客日期數量
PeteMonday19.00
PeteMonday-28.20
PeteWednesday-84.00
SarahFriday100.00
SarahFriday150.00
SarahFriday-40.00
 

2.  第二 : 同一個table應該是要相關的資料
錯誤:
元件來源
元件 ID (主鍵)價格供應商ID (主鍵)供應商名稱供應商住址
6559.991Stylized PartsVA
7320.001Stylized PartsVA
6569.992ACME IndustriesCA
正確:
供應商
供應商 ID (主鍵)名稱住址
2ACME IndustriesCA
1Stylized PartsVA

元件來源
元件 ID (主鍵)價格供應商 ID(主鍵、外來鍵)
6559.991
7320.001
6569.992

3.  第三 : 非主鍵欄位不能有依賴關係 ex 數量 單價 小計(x)

錯誤:

價格供應商名稱供應商住址
59.99ACME IndustriesCA
20.00ACME IndustriesCA
69.99Stylized PartsVA



Primary Key
主鍵 (Primary Key) 中的每一筆資料都是表格中的唯一值。換言之,它是用來獨一無二地確認一個表格中的每一行資料。主鍵可以是原本資料內的一個欄位,或是一個人造欄位 (與原本資料沒有關係的欄位)。主鍵可以包含一或多個欄位。當主鍵包含多個欄位時,稱為組合鍵 (Composite Key)。

主鍵可以在建置新表格時設定 (運用 CREATE TABLE 語句),或是以改變現有的表格架構方式設定 (運用 ALTER TABLE 語句)

MySQL:
CREATE TABLE Customer
(SID integer,
Last_Name varchar(30),
First_Name varchar(30),
PRIMARY KEY (SID));
Oracle:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
SQL Server:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
以下則是以改變現有表格架構來設定主鍵的方式:
MySQL: 
ALTER TABLE Customer ADD PRIMARY KEY (SID);
Oracle: 
ALTER TABLE Customer ADD PRIMARY KEY (SID);
SQL Server: 
ALTER TABLE Customer ADD PRIMARY KEY (SID);

請注意,在用 ALTER TABLE 語句來添加主鍵之前,我們需要確認被用來當做主鍵的欄位是設定為 『NOT NULL』 ;也就是說,那個欄位一定不能沒有資料



FOREIGN KEY
外來鍵是一個(或數個)指向另外一個表格主鍵的欄位。外來鍵的目的是確定資料的參考完整性 (Referential Integrity)。換言之,只有被准許的資料值才會被存入資料庫內。
舉例來說,假設我們有兩個表格:一個 CUSTOMER 表格,裡面記錄了所有顧客的資料;另一個 ORDERS 表格,裡面記錄了所有顧客訂購的資料。在這裡的一個限制,就是所有的訂購資料中的顧客,都一定是要跟在 CUSTOMER 表格中存在。在這裡,我們就會在 ORDERS 表格中設定一個外來鍵,而這個外來鍵是指向 CUSTOMER 表格中的主鍵。這樣一來,我們就可以確定所有在 ORDERS 表格中的顧客都存在 CUSTOMER 表格中。換句話說,ORDERS 表格之中,不能有任何顧客是不存在於 CUSTOMER 表格中的資料。
這兩個表格的結構將會是如下:
CUSTOMER 表格
欄位名性質
SID主鍵
Last_Name
First_Name
ORDERS 表格
欄位名性質
Order_ID主鍵
Order_Date
Customer_SID外來鍵
Amount
在以上的例子中,ORDERS 表格中的 Customer_SID 欄位是一個指向 CUSTOMER 表格中 SID 欄位的外來鍵。
以下列出幾個在建置 ORDERS 表格時指定外來鍵的方式:
MySQL:
CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
PRIMARY KEY (Order_ID),
FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID));
Oracle:
CREATE TABLE ORDERS
(Order_ID integer PRIMARY KEY,
Order_Date date,
Customer_SID integer REFERENCES CUSTOMER (SID),
Amount double);
SQL Server:
CREATE TABLE ORDERS
(Order_ID integer PRIMARY KEY,
Order_Date datetime,
Customer_SID integer REFERENCES CUSTOMER (SID),
Amount double);
以下的例子則是藉著改變表格架構來指定外來鍵。這裡假設 ORDERS 表格已經被建置,而外來鍵尚未被指定:
MySQL:
ALTER TABLE ORDERS
ADD FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID);
Oracle:
ALTER TABLE ORDERS
ADD (CONSTRAINT fk_orders1) FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID);

SQL Server:
ALTER TABLE ORDERS 
ADD FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID);




ALTER TABLE

在表格被建立在資料庫中後,我們常常會發現,這個表格的結構需要有所改變。常見的改變如下:
  • 加一個欄位
  • 刪去一個欄位
  • 改變欄位名稱
  • 改變欄位的資料種類
以上列出的改變並不是所有可能的改變。ALTER TABLE 也可以被用來作其他的改變,例如改變主鍵定義。
ALTER TABLE 的語法如下:
ALTER TABLE "table_name"
[改變方式];
[改變方式] 的詳細寫法會依我們想要達到的目標而有所不同。再以上列出的改變中,[改變方式] 如下:
  • 加一個欄位: ADD "欄位 1" "欄位 1 資料種類"
  • 刪去一個欄位: DROP "欄位 1"
  • 改變欄位名稱: CHANGE "原本欄位名" "新欄位名" "新欄位名資料種類"
  • 改變欄位的資料種類: MODIFY "欄位 1" "新資料種類"
以下我們用在CREATE TABLE 一頁建出的 Customer 表格來當作例子:
Customer 表格
欄位名稱資料種類
First_Namechar(50)
Last_Namechar(50)
Addresschar(50)
Citychar(50)
Countrychar(25)
Birth_Datedatetime
第一,我們要加入一個叫做 "Gender" 的欄位。這可以用以下的指令達成:
ALTER TABLE Customer ADD Gender char(1);
這個指令執行後的表格架構是:
Customer 表格
欄位名稱資料種類
First_Namechar(50)
Last_Namechar(50)
Addresschar(50)
Citychar(50)
Countrychar(25)
Birth_Datedatetime
Genderchar(1)
接下來,我們要把 "Address" 欄位改名為 "Addr"。這可以用以下的指令達成:
ALTER TABLE Customer CHANGE Address Addr char(50);
這個指令執行後的表格架構是:
Customer 表格
欄位名稱資料種類
First_Namechar(50)
Last_Namechar(50)
Addrchar(50)
Citychar(50)
Countrychar(25)
Birth_Datedatetime
Genderchar(1)
再來,我們要將 "Addr" 欄位的資料種類改為 char(30)。這可以用以下的指令達成:
ALTER TABLE Customer MODIFY Addr char(30);
這個指令執行後的表格架構是:
Customer 表格
欄位名稱資料種類
First_Namechar(50)
Last_Namechar(50)
Addrchar(30)
Citychar(50)
Countrychar(25)
Birth_Datedatetime
Genderchar(1)
最後,我們要刪除 "Gender" 欄位。這可以用以下的指令達成:
ALTER TABLE Customer DROP Gender;
這個指令執行後的表格架構是:
Customer 表格
欄位名稱資料種類
First_Namechar(50)
Last_Namechar(50)
Addrchar(30)
Citychar(50)
Countrychar(25)
Birth_Datedatetime


DROP TABLE 
有時候我們會決定我們需要從資料庫中清除一個表格。事實上,如果我們不能這樣做的話,那將會是一個 很大的問題,因為資料庫管理師 (Database Administrator - DBA) 勢必無法對資料庫做有效率的管理。 還好,SQL 有提供一個 DROP TABLE 的語法來讓我們清除表格。 DROP TABLE 的語法是:
DROP TABLE "表格名";
我們如果要清除在上一頁中建立的顧客表格,我們就鍵入:
DROP TABLE Customer;



TRUNCATE TABLE
有時候我們會需要清除一個表格中的所有資料。要達到者個目的,一種方式是我們在 上一頁看到 的 DROP TABLE 指令。不過這樣整個表格就消失,而無法再被用了。另一種方式就是運 用 TRUNCATE TABLE的指令。在這個指令之下,表格中的資料會完全消失, 可是表格本身會繼續存在。 TRUNCATE TABLE 的語法為下:
TRUNCATE TABLE "表格名";
所以,我們如果要清除在 SQL Create Table 那一頁建立的顧客表格之內的資料,我們就鍵入:
TRUNCATE TABLE Customer;




UPDATE 
我們有時候可能會需要修改表格中的資料。在這個時候,我們就需要用到UPDATE 指令。這個指令的語法是:
UPDATE "表格名"
SET "欄位1" = [新值]
WHERE "條件";
最容易瞭解這個語法的方式是透過一個例子。假設我們有以下的表格:
Store_Information 表格
Store_NameSalesTxn_Date
Los Angeles150005-Jan-1999
San Diego25007-Jan-1999
Los Angeles30008-Jan-1999
Boston70008-Jan-1999
我們發現說 Los Angeles 在 1999 年 1 月 8 號的營業額實際上是 $500,而不是表格中所儲存的 $300,因此我們用以下的 SQL 來修改那一筆資料:
UPDATE Store_Information
SET Sales = 500
WHERE Store_Name = 'Los Angeles'
AND Txn_Date = 'Jan-08-1999';
現在表格的內容變成:
Store_Information 表格
Store_NameSalesTxn_Date
Los Angeles150005-Jan-1999
San Diego25007-Jan-1999
Los Angeles50008-Jan-1999
Boston70008-Jan-1999
在這個例子中,只有一筆資料符合 WHERE 子句中的條件。如果有多筆資料符合條件的話,每一筆符合條件的資料都會被修改的。
我們也可以同時修改好幾個欄位。這語法如下:
UPDATE "表格"
SET "欄位1" = [值1], "欄位2" = [值2]
WHERE "條件";



DELETE FROM
在某些情況下,我們會需要直接由資料庫中去除一些資料。這可以藉由 DELETE FROM 指令來達成。它的語法是:
DELETE FROM "表格名"
WHERE "條件";
以下我們用個實例說明。假設我們有以下這個表格:
Store_Information 表格
Store_NameSalesTxn_Date
Los Angeles150005-Jan-1999
San Diego25007-Jan-1999
Los Angeles30008-Jan-1999
Boston70008-Jan-1999
而我們需要將有關 Los Angeles 的資料全部刪除。在這裡我們可以用以下的 SQL 來達到這個目的:
DELETE FROM Store_Information
WHERE Store_Name = 'Los Angeles';
現在表格的內容變成:
Store_Information 表格
Store_NameSalesTxn_Date
San Diego250Jan-07-1999
Boston700Jan-08-1999

2016年1月7日 星期四

給ASP.NET 初學者的話

ASP.NET網頁的特性與生命週期
跟其他 ASP / PHP / JSP都不太一樣
他強調PostBack(回傳)

(1). 您在畫面(網頁)上的任何動作,例如:按下按鈕,或是按下(操作)什麼控制項的功能

都會觸發「PostBack(回傳)」

然後重新執行一次 Page_Load事件
(2). 我也必須在第一節課裡面,讓學生知道「網頁程式」是一個無狀態的協定(Stateless Protocol)

補充範例: 寫到 ADO.NET程式了,還在問 Connection.Close()

而且他在A事件開啟DB連線,。

必須另外按下一個 Button按鈕,才能關閉連結。

(他完全不懂網頁程式的運作、也不知道什麼叫做 PostBack) 他想要寫一個功能,能在 ASP.NET程式錯誤的時候,抓圖(Print Screen)
把 User的瀏覽器(他正在上哪一個網頁、URL),畫面抓起來 不小心看到以前的文章,才知道他不是剛剛加入的菜鳥

他想要寫書賺點錢(ASP.NET的書....號稱有很多絕招!) 不懂網頁程式「前端(JavaScript)」與「後端(ASP.NET)」的差異
不懂網頁程式(Web Form)與 Windows程式(Windows Form)的差異

因為基本的差異不懂,所以被另外一個不懂的人,帶著亂跑(沒辦法說服對方),
進入一個「混亂而且很難作」的困境!

活該!!仗著自己有經驗,看不起網頁程式,結果死在一開始的地方而不自知
Server上已有asp.net的web
正常來說web會讀取server的DB
但我想問的是
從web端讀到使用者本機的access
*全部使用者的access架構.路徑.名稱等,全部都一樣的情況下

其實web端就是個display用的
真正的DB是放在使用者的電腦上

我設路徑為C:\DB.mdb
本機測當然沒問題
丟到server上時
會讀成server自己的C:\DB.mdb

所以是否有解決之道?
以前的一個範例,說明 Windows Form與 Web Form(網頁程式)兩者的差異!

2016年1月5日 星期二

繪製統計圖表的利器 - Microsoft Chart Controls for Microsoft .NET Framework 3.5

在古早古早的時代,如果遇到有需要繪製統計圖表的需求,而且沒錢買現成的圖表元件的話,最慘的作法是土法煉鋼式的自己把圖表「刻」出來;先進「一點點」的作法可以引用Office中Excel的製圖元件(ASP.Net 2.0版就可以用喔!!)。
而在.Net Framework 3.5 SP1之後,當然就首推Microsoft Chart Controls for Microsoft .NET Framework 3.5 (英文版連結在此)啦,因為它免費!!如果你有幸所使用的.Net Framework是4.0版的話(也就是使用Visual Studio 2010啦)那就更棒了,因為它內建!! 


在古早古早的時代,如果遇到有需要繪製統計圖表的需求,而且沒錢買現成的圖表元件的話,最慘的作法是土法煉鋼式的自己把圖表「刻」出來;先進「一點點」的作法可以引用Office中Excel的製圖元件(ASP.Net 2.0版就可以用喔!!)。
而在.Net Framework 3.5 SP1之後,當然就首推Microsoft Chart Controls for Microsoft .NET Framework 3.5 (英文版連結在此)啦,因為它免費!!如果你有幸所使用的.Net Framework是4.0版的話(也就是使用Visual Studio 2010啦)那就更棒了,因為它內建!!
image


安裝好之後,在Visual Studio 2008的Toolbox中就可以看到多了Chart控制項囉!! 把它拖拉到我們的頁面上的話,它預設會生出以下的HTML碼: 
<asp:Chart ID="Chart1" runat="server">
    <Series>
        <asp:Series Name="Series1">
        </asp:Series>
    </Series>
    <ChartAreas>
        <asp:ChartArea Name="ChartArea1">
        </asp:ChartArea>
    </ChartAreas>
</asp:Chart>

而在Design Mode中看到的則是如下的長條圖:

image
 
再來跟大家稍微的介紹一下Chart的幾個較為常用的屬性:
首先要登場的是Palette屬性:我們可以透過選取內建的調色盤,輕鬆的改變圖表的配色。

image
 

再來是Chart分類下的相關屬性:

image
  • Annotations:可以在圖表中加入說明
  • ChartAreas:可以設定圖表的外觀,例如是否要以3D方式呈現、繪圖的細節程度...等等
image
  • Legend:可以在圖表中加入圖說的部份(如下圖圖表的右上角)
image
  • Series:可以設定圖表中資料分組的相關資料,例如資料組名稱、呈現方式等等
image
  • Titles:可以設定圖表的表頭文字
image

還有很重要的Image分類下的設定:

image
  • AntiAliasing:可以設定要對圖表中的哪些物件進行反鋸齒處理。
  • Compression:設定圖片的壓縮率,壓縮率越高失真越嚴重,但檔案越小。
  • ImageLocation:圖檔的路徑和檔名,需搭配ImageStorageMode使用。ChartPic為圖檔的前綴檔名_#SEQ(300,3)代表圖片會使用流水號的方式命名,最多允許300張,之後就會再從頭開始編號;而3代表了該圖片生成的程序Timeout時間為三分鐘,關於更詳細的設定方式請參考:Image File Management (Chart Controls)。
  • ImageStorageMode:設定圖片的儲存方式,可以選擇要儲存在實際的路徑中,或是透過HttpHandler顯示而不進行儲存的動作。
  • ImageType:圖檔的編碼格式。
  • IsSoftShadows:陰影的繪製是否要進行柔化處理。
  • RenderType:設定圖片的顯示方式,可選擇以ImageTag或是以BinaryStreaming的方式傳輸圖片,還有ImageMap的方式顯示,詳細參數設定請參考:Chart Image Rendering (Chart Controls)。
  • TextAntiAliasingQuality:設定文字反鋸齒的品質。

最後再補充一個也很重要的屬性 – Appearance分類下面的BorderSkin(其實就在Palette上面啦):可以用來設定圖表的外框。

image