2015年1月26日 星期一

VS 2012 C# FileUpload控制項 -- 20150126

FileUpload有幾個常用的屬性:

  • FileName:已上傳檔案的名稱
  • HasFile:判斷是否有指定上傳的檔案(true:有檔案;false:無檔案)
  • PostedFile:取得用戶端上傳檔案的HttpPostedFile物件,如:ContentLength(檔案大小)、ContentType(檔案類型字串)、FileName(用戶端的檔名路徑)

※當FileUpload上傳的資料量超過4MB時,就會出現無法顯示網頁的錯誤。若要修改此限制的話,需要在Web.Config中<system.web>段落中加入如下設定(已增加到8MB為例子):
---------------------------------------------------------------
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <httpRuntime maxRequestLength="8192"/>                       <--- 加入此句!
  </system.web>
</configuration>
-----------------------------------------------------------------










------------補充2015/04/17範例:--------------------------------

※前端網頁的畫面(Upload01-1.aspx)














※後端程式碼的畫面(Upload01-1.aspx.cs)





































上述範例中,有幾個重點:

  • .使用HasFile屬性,用來驗證FileUpload控制項是否夾帶檔案。
  • .SaveAs( )方法會將檔案儲存到Web Server上指定目錄的「完整路徑」。
         「完整路徑」表示法:
        
              string savePath = "D:\\練習區\\MySelfTest\\Upload\\";

              string savePath = @"D:\練習區\MySelfTest\Upload\";

              string savePath = Server.MapPath("~/Upload/");


  • .SaveAs( )方法會將上傳的檔案,寫入至指定的目錄(Upload)。因此,ASP.NET應用程式必須具有Web Server這個指定目錄的「寫入」權限
     ※重點一:Server端的「目錄」與「檔名」,才能使用.SaveAs( )方法!!

     ※重點二:檔案大小(容量)為「零」,無法上傳(如:純文字檔.txt)。





參考:
  • 微軟MVP的ASP.NET 4.5專題實務[I] C#入門實戰









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類別中,所提供的WriteRead方法可對文件進行讀、寫操作。而實際上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 從零開始 (博碩文化)