2015年1月20日 星期二

VS 2012 C# Dispose、Close、Flush區分 -- 20150120


補充一:

Dispose( )、Close( )、Flush( )之間的區分:


  • Dispose( ):清除連接,之後不可使用conn.Open( ),如需要使用conn.Open( )的話,必須重新建立資料庫連線。

舉例:
 string connString= WebConfigurationManager.ConnectionStrings["資料庫名稱"].ConnectionString;  
 SqlConnection conn = new SqlConnection(connString);     //建立資料庫連線

  • Close( ):暫時關閉,之後還是可以直接使用conn.Open( ),不需要再連接資料庫一次。
  • Flush( ):將所有的資訊「從基礎緩衝區移動到目標區」或「清除緩衝區」,或者同時進行前述兩種。簡單講:清除資料流的緩衝區,使得資料都寫入文件或系統中。
----------------------------------------------------------------------

補充二:

在NET中常用的資料流(Stream)有:BufferedStream(改善讀取和寫入作業效能)、FileStream(用於讀取和寫入檔案)、MemoryStream(用於讀取和寫入作為備份存放區的記憶體)、NetworkStream(用於透過網路通訊讀取和寫入)......(※屬於System.IO和System.Net命名空間),其涉及三個基本操作:

  • 讀取:從資料流將資料傳送到資料結構。如:位元組陣列
  • 寫入:從資料來源將資料傳送至資料流。
  • 查詢:查詢和修改資料流內的目標位置。

讀取器與寫入器:會處理編碼字元和位元組之間的轉換,讓資料流能夠完成作業,常用的有:

  • BinayReader和BinayWriter:用於將基本資料類型當做二進位值讀取和寫入。
  • StreamReader和StreamWriter:使用編碼值在字元與位元組之間進行轉換的方式讀取和寫入字元。
  • StringReader和StringWriter:從字串讀取字元以及將字元寫入字串。
  • TextReader和TextWriter:作為其他讀取和寫入二進位資料之外的字元與字串之讀取器和寫入器的抽象基底類別。



文件讀寫:

透過FileStream類別中,所提供的Write和Read方法可對文件進行讀、寫操作。而實際上Write方法只是把資料寫入的緩衝區中,然後在一次性寫入到文件中,來提高寫入的效率和速度。關於FileStream提供了一個緩衝區寫入文件方式,就是Flush方法。(※緩衝區是為了提高I/O效能而設置的)

※WriteLine( ):將目前的位元組寫入標準輸出Stream(資料流);使用WirteLine( )方法時會自動換行。


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

補充三:(2015/1/29)

StreamWriter:是為位元組輸入和輸出所設計,將一連串的「位元組」寫入目前的Stream(資料流),並由這資料流中目前的位置前移寫入的位元組數目。

※StreamWriter預設為使用UTF8Encoding的執行個體。









參考網址:
http://msdn.microsoft.com/zh-tw/library/system.io.stream.flush(v=vs.110).aspx
http://www.360doc.com/content/12/0425/16/9290626_206459132.shtml
http://blog.csdn.net/sunnykaho/article/details/4459330
https://msdn.microsoft.com/zh-tw/library/k3352a4t(v=vs.110).aspx

2015年1月16日 星期五

VS 2012 C# Session筆記 -- 20150116

Session(屬於 HttpSessionState類別物件):

主要用來在Server端存放目前使用者工作階段的資訊,也可用來記錄Client端的個別資訊。Session常應用在網路購物車、通過帳/密驗證才可存取後台網頁、記錄會員登入後的帳號或名字...等。瀏覽器預設20分鐘內沒有存取Server端ASP.NET網頁時,則Session會重設為null(※沒有動作的話,會自動關閉,以釋放資源。),若要保留Session物件的資料,則須將Session寫入到檔案或SQL資料庫內。

※備註:Session很嚴謹,會鎖定[同一個瀏覽器],此瀏覽器被關閉,Session就無法存取。

公式:

Session[ " 變數名稱 " ] = 變數



2015年1月15日 星期四

VS 2012 C# Cookie筆記 -- 20150115

Cookies:

在瀏覽很多網站時,會在(Client端)電腦系統中留下一些小檔案,也就是Cookies,當您再去瀏覽這些網站時,電腦系統便會讀取這些Cookies,且會重新儲存一遍。


優點:不需要用伺服器資源,因Cookies資料是儲存在Client端電腦中。且Cookies(儲存與讀取)使用起來簡單,並可自訂資料逾時期間。

缺點:大小有限制。


公式:

Response.Cookies[ " 變數名稱 " ].Value = 變數值;    (寫入Cookie)

Request.Cookies[ " 變數名稱 " ].Value     (讀取Cookies)
※讀取Cookies時,該Cookies尚未設定,ASP.NET會傳回例外錯誤而導致程式中止執行。

舉例:

if (Request.Cookies[ " 變數名稱 " ] != null)
{
         Request.Cookies[ " 變數名稱 " ].Value 
}


Response.Cookies[ " 變數名稱 " ].Expires = DateTime.Now.AddDays ;    (設定此Cookie的到期日)
※若沒有設定到期日,當瀏覽器關閉時,則Cookies立刻刪除。



備註:
預設同一網域下的網頁可以存取同一個Cookie,所以同網站的不同網頁可存取同一組Cookie設定,且可進行修改。

2015年1月13日 星期二

VS 2012 C# ViewState筆記 -- 20150113

ViewState原理:

在同一網頁前後連線間保留狀態的方法,在網頁載入前,會「還原連線狀態」,意指會讀取ViewState,然後一一還原控制項或變數的屬性與內容。(20151127)



ViewState(檢視狀態):

功能:保存網頁上的資料,當網頁觸發PostBack時,資料不會消失。

※有時候網頁程式可能需要某些資料持續保留,以便讓後續的連線可以使用,故使用ViewState來紀錄資料。此外,可利用ViewState儲存網頁上各控制項的狀態或程式內部所需的資料,因ViewState是使用網頁內的隱藏欄位來儲存狀態,所以ViewState的使用將導致網頁大小的增加連帶影響使用者連線網頁的速度。

舉例:
  1. 在網頁TextBox欄位中輸入某值,當PostBack發生後,剛所輸入的值還出現在TextBox欄位中。
  2. 在DataGrid中切換分頁時,都可保存DataGrid上(在Client Side端)所有的資料,不需要每更換一次分頁,就從撈一次資料庫,可節省系統的資源。


優點:
不需要使用Server的資源來記錄資訊,可減輕Server負擔,改善網站執行效率。

缺點:
網站不安全,資料量多的話,影響傳輸的效率,也會造成網頁Load時間會較久,且資料會被使用者檢視或者攔截。


公式:

ViewState[ " 變數名稱 " ] = 變數值


備註:

關閉Page(網頁)ViewState功能時,發現某個控制項運作不正常,可單獨將該控制項的ViewStateMode的屬性設為Enabled(啟用),即可。(20151130)




















參考網址:
http://yan3776.pixnet.net/blog/post/11094909-viewstate%E7%9A%84%E9%81%8B%E7%94%A8

參考書籍:

ASP.NET 4.0 -使用C#2012 從零開始 (博碩文化)

2014年11月29日 星期六

VS 2012 C# 偵錯與例外處理 -- 20141128

程式的錯誤可分三大類:

  •  編譯時期錯誤(Compile Time):

    在程式編寫過程中,可由開發工具、編譯器檢查出來的語法錯誤。(如:變數未宣告)

     →解決方法:語法不熟悉,可立即查閱線上說明。 
  •  邏輯錯誤:

    當程式已通過語法、語意檢查,可正常編譯執行,但程式執行結果卻非預期或不合理。

     → 解決方法:執行結果不正確實,再回頭檢查與修正。
  •  執行時期錯誤(Runtime Error):

    指程式在執行階段,遭遇程式未預期、且無法有效處理的意外狀況。(如:連線資料庫失敗)

     → 解決方法:利用VWD提供的偵錯(Debug,或稱除錯)功能來找出問題點,並於已修正。

2014年11月27日 星期四

VS 2012 C# AdRotator輪播設計 -- 20141126

經常看網頁有輪播功能,然而看似很難的功能,其實透過VS 2012簡單的幾個步驟就可以輕鬆製作呈現出來。

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

步驟一、先製作要輪播的圖片(當然要用文字也可以),如下:

banner1.gif

banner2.gif

banner3.gif



步驟二、設定製作資料來源(包含:XML、Access、SQL Server...等)

 ※ 這裡就採用XML檔作為資料來源,加入→加入新項目→XML檔(圖一)
(圖一)
(圖二)














































根據(圖二)中,在XML檔案中輸入程式碼,如下:

<Advertisements>
  <Ad>
    <ImageUrl>img/banner1.gif</ImageUrl>
    <NavigateUrl>http://tw.yahoo.com</NavigateUrl>           <--- (超連結網址)屬性
    <Impressions>20</Impressions>                                          <--- (輪播出現次數的權重)屬性
  </Ad>
  <Ad>
    <ImageUrl>img/banner2.gif</ImageUrl>
   <NavigateUrl>http://www.google.com.tw</NavigateUrl>
    <Impressions>20</Impressions>  
  </Ad>
  <Ad>
    <ImageUrl>img/banner3.gif</ImageUrl>
   <NavigateUrl>http://www.hinet.net</NavigateUrl>
    <Impressions>60</Impressions>  
  </Ad>
</Advertisements>

※上述(圖二)圖片的檔名有錯誤,要注意別照抄!!
※輪播權重的表示,平均每100次連線,圖片出現的次數。假設上述banner3.gif會出現60次。

步驟三、使用AdRotator控制項

(圖三)
(圖四)
(圖五)





(圖六)

根據上述圖片指示操作後,輪播廣告設定就完成。



結論:

很多事情動手去做才學會,千萬別眼高手低,只有自己依樣畫葫蘆才知道來龍去脈,若您和我都是寫程式的新手,就動手製作去做做看,肯定有收穫的!!!


參考書籍:新觀念APS.NET 4.0網頁程式設計-使用Microsoft Visual C#(施威銘研究室 著) 旗標



2014年11月22日 星期六

VS 2012 C# GridView中欄位的日期格式變化(DateTime) -- 20141121

結論:

     將GridView欄位中的「日期時間」格式改成2014/11/21(如下圖)


















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


由於在資料庫設計時,將日期欄位為DateTime格式,故前端的GridView呈現預設日期欄位為2014/11/1 上午 12:00:00(如下圖)




















解決方式一、

在資料欄位DataFormatString屬性中,加入  {0:yyyy/MM/dd}































決方法二、

直接在程式碼中加入   DataFormatString="{0:yyyy/MM/dd}"













-----補充(2015/08/04)--------------------------------------------------------------------------------


※GirdView的編輯欄位對照:










































































































---------※資料格式運算式(DataFormatString),以下是舉幾個例子說明:------------------------------

原本輸入的值 格式(英文大小寫有差別) 輸出的結果
2015/1/1 {0:yyyy} 2015
2015/1/1 {0:yyyy年MM月dd日} 42005
1234 {0:D8} 00001234
123.456 {0:C} 123.46

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



































參考文獻:微軟的「自訂日期和時間格式字串」