2015年3月19日 星期四

Visual 2012 C# 快速製作簡單的網頁,並將資料寫入資料庫內(Part 1) -- 20150319

緣由:

因目前公司要所有的電腦科室的人員加入開發系統的行列,但小弟本身就是對這塊比較不熟悉,故都是照的書上的範例練習,於是小弟比較偷懶,想藉助拖拉的方式,將網頁畫面製作出來,而程式碼盡可能寫越少越好。接下介紹比較簡單的方式,製作一個簡單可讀、寫的網頁。




步驟一、先建立一個資料庫TestDB,並開三張資料表(Customer、QA、Site),如下:

※CustID、qaID、SiteID都設定成自動產生編號。














步驟二、將網頁的畫面透過控制項工具製作完成,且執行看預覽畫面。(如下圖)























步驟三、從「資料」選項中,拖拉出「SqlDataSource」控制項到畫面上。
































點選「SqlDataSource1」,並設定[發問者]的資料(資料庫)來源。






















































※設定IP位址或名稱(※此處「點號」代表SQL Server安裝在這台電腦上),並輸入sa的帳號與密碼,最後在選擇在將資料從哪個資料庫(TestDB)讀取或存入。











































































※選擇[發問者]的資料表,並勾選其欄位。(※此欄位到時候會用到)







































































步驟四、點選「DropDownList」控制項,並選擇資料來源(※剛才設定的SqlDataSource1)。


















※此處有兩個資料欄位要選擇,這對下拉式選單來說,是非常重要的。攸關是否可從[資料表]帶出值,且當寫入資料表時,是否不會跳出錯誤訊息。

































※同理,依照上述步驟,也將[地點]的資料表[Site]做好連結(SqlDataSource2)。此時連線字串,可一直無限重複使用。























































































※針對上述都設定好後,執行預覽畫面。(如下圖)






















步驟五、先拖拉「SqlDataSource3」放置網頁畫面上,因為「SqlDataSource3」攸關網頁上的欄位寫入資料表中,故此步驟是很重要的。



























根據上述操作「步驟三」再重複操作一遍。(※唯一不同的地方,必須點選「進階」鈕。)




































進入「進階...」後,要勾選「產生INSERT、UPDATE和DELETE陳述式」。有時候「進階..」中沒辦法勾選「產生INSERT、UPDATE.....」,原因是在設資料表時,沒有給主索引鍵的關係。





















步驟六、點選「SqlDataSource3」,再選擇「InsertQuery」屬性。

根據網頁上面的資料欄位,設定對應的「參數來源」。※此處影響資料是否可以寫入資料表中。





 ※對應都設定完之後,測試查詢是否可帶出資料。





































步驟七、點選「送出」鈕,觸發Button_Click事件。(※準備開始寫程式碼)

























步驟八、根據下圖程式碼照抄即可!!!



步驟九、測試是否可以加資料寫入資料表中。











































步驟十、直接開啟資料表,查看是否剛才那筆資料是否有寫入。


























結論:

懶惰的人會想辦法找出簡單的作法,來達相同的目的,本人是想用最少的程式碼來達到想要的結果,藉由自己亂摸索與參考書本上,最後不小心搞出來的心得。


































































































































2015年3月17日 星期二

VS 2012 C# 引述的傳遞方法 -- 20130108

Visual C# 常用的兩種方式做「引數」的傳遞:

  • 傳直呼叫(Call By Value)
只當呼叫「敘述」將(實引數)傳給(虛引數)只做傳入的動作,此時將(虛引數)為「區域變數」,自動配置新的記憶位址給(虛引數)來存放(實引數)傳入的內容,實引數和虛引數兩者在記憶體分別占用不同的記憶位址。
  • 參考呼叫(Call By Reference)


2015年3月10日 星期二

VS 2012 C# 清單控制項(List Control) -- 20150310

清單控制項(List Control)包含:

  • DropDownList
  • ListBox
  • CheckBoxList
  • CheckBox
  • RadioButtonList
  • RadioButton

---------------DropDownList-------------------------------------


DropDownList控式項的屬性:Select、Text、Value

  • Text屬性:表示下拉式選單,在畫面上呈現的[選項文字]。
  • Value屬性:子項目文字的[值],可傳遞給程式碼使用。
  • NET 4.5起多了兩個屬性:[ItemType]、[SelectMethod]功能。
  • DropDownList.SelectedValue.ToString( ):選擇下拉式選單中,某個Item選項的數值(Value),並以字串文字呈現。
  • ComboBox就是DropDownList和TextBox兩種功能的混合,在Windows Form裡面有,而[網頁(Web Form)]則無。


點選DropDownList下拉式選項時,需要兩項基本知識:
  1. DropDownList的子選項(Item),有兩個屬性。出現在畫面上的選項文字(Text),以及Item選項所傳遞的數值(Value)。
  2. 點選DropDownList的子選項(Item),會觸發DropDownList的「SelectIndexChanged事件」。

使用.Add()方法和.Remove()方法從Items集合中,加入或移除子項目,可輸入[參數ListItem]或[參數String]。

※若使用[字串]來做左右搬移,將做不到[子選項]的Text與Value屬性兩者不同的狀況。

語法: DropDownList1.Items.Add(new ListItem("Text屬性","Value屬性"));


範例說明:透過TextBox1將文字加入到DropDownList控制項中,程式碼如下:

DropDownList.Items.Add(TextBox1.Text);



--------------ListBox--------------------------------------
  • ListBox屬性:SelectionMode = Single(單選)、Multiple(複選)
  • ListBox.Items.Count:可獲得ListBox控制項裡面,共有幾個子項目。
  • ListBox.Items[數字].Text:可找出[第幾個]子選項的文字(Text);若將Text改成Value,則可找到[第幾個]子選項的值(Value)。
  • ListBox.Items[數字].Selected:判別[第幾個]子選項,是否被人選取了?若為True,表示這子選項被人選點了!!
  • ListBox.Items.Add( ):新增ListBox控制項的子項目!
  • ListBox.Items.Remove( ):新增ListBox控制項的子項目!
  • 以上所提到的[數字]必須從[零]算起!!


舉例:

String my_text = "";
      
if(ListBox1.SelectedIndex == -1)         // 當ListBox1.SelectedIndex等於-1時,表示[未選擇]。
{
     Label1.Text="未選擇下拉式項目";  
}
else
{
    for(int i=0;i<ListBox1.Items.Count;i++)
    {
       if(ListBox1.Items[i].Selected)                     //第i個被選取
       {
           my_text += "<br> " +ListBox1.Items[i].Text;    //第i個選項的文字
       }
          Label1.Text=my_text;
    }
}



--------------CheckBoxList-----------------------
  • RepeatColumns:分兩、三行。
  • RepeatDirection:水平或垂直排列。
  • RepeatLayout:可修正CheckBoxList的畫面樣式。       
         → (ASP.NET 4.0多了兩個新的選項:OrderedList、UnorderedList)
  • CheckBoxList.Items.Count:可獲得CheckBoxList控制項裡面,共有幾個[子項目]?
  • CheckBoxList.Items[數字].Text:可找出[第幾個]選項的子項目文字(Text)。若將Text改成Value,則可找到[第幾個]子選項的值(Value)。(※數字必須從[零]算起!!)
  • CheckBoxList.Items[數字].Selected:判別[第幾個]子選項,是否被人選取了?若為True,表示這子選項被人選點了!!





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類別中,所提供的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設定,且可進行修改。