顯示具有 開放原始碼 標籤的文章。 顯示所有文章
顯示具有 開放原始碼 標籤的文章。 顯示所有文章

2016年12月21日 星期三

ASP.NET Core & ADO.NET 入門 #1 -- 資料庫連結(SqlConnection)

ASP.NET Core & ADO.NET 入門 #1 -- 資料庫連結(SqlConnection)


ASP.NET Core & ADO.NET 入門 #1,最簡單的操作步驟
(1).  SqlConnection連結字串
本範例提供YouTube教學影片 + PDF電子書下載

***  行前準備  ***
首先,您可以先瞭解 開放原始碼(開源)的 ASP.NET Core(以前名為 ASP.NET 5
      [中文翻譯] ASP.NET 5 概觀 (ASP.NET 5 Overview,原作 Tom FitzMacken 2014/11/12)
      https://dotblogs.com.tw/mis2000lab/2014/12/03/aspnet_5_overview_webform_46      
      [中文翻譯] ASP.NET 5 簡介(Introducing ASP.NET 5,原作ScottGu 2015/2/23)
      https://dotblogs.com.tw/mis2000lab/2015/03/11/aspnet_5_introduce_scottgu_20150223

接著,當您打開 VS 2015 (Update 3)的時候,可能要先安裝這個套件 for VS 2015。這個 Tool 還是 Preview版
      系統會自動偵測,並詢問您是否安裝?

以下的範例,是從 Wrox出版的這本書而來,您可以參閱此書的 第三十七章(原廠網站有範例下載)

Professional C# 6 and .NET Core 1.0


Christian Nagel
ISBN: 978-1-119-09660-3
1536 pages
April 2016......註解:提醒您,這本書以為 Windows Form 主軸,並非 網頁範例為主
==========================================================================
YouTube教學影片 -- https://youtu.be/1UaO8C2MnJQ


*** 開始動作 ***
(1). VS 2015 新建一個 ASP.NET Core 的 Web專案。
      下一步,我選擇了「」專案

(2). 這是ASP.NET Core 「」專案的架構
很抱歉,關於這個架構的檔案、目錄,我暫時沒有研究。如果您想進一步瞭解,請參與網路上的其他文章

(3). 預設的狀態下,您就可以編譯這個專案,而且看見結果(執行後,網頁出現 Hello World 字樣)
對照起來,原來是在 Startup.cs這個檔案的最後下方,就有 Hello World 字樣

(4). 我們加入熟悉的 ADO.NET程式碼(以 DataReader + SqlConnection / SqlCommand為例)
    如果您不熟悉,可以參閱以前的文章與範例 -- 

這裡的變化比較大。
以前撰寫程式時,如果缺乏 NameSpace,您可能要在程式碼「最上方」自己動手寫進來
甚至.....您要使用「加入參考」把這個DLL檔(二進位檔案)加入您的網站或專案

但是在 ASP.NET Core,我們可以有下面兩種作法。任選其一即可。

4-1.    透過 Visual Studio來幫忙,自己會幫您完成。詳見下面圖解。
Visual Studio會自動幫您加上 NameSpace,也會在 project.json設定檔裡面,加入必要的元件。


4-2.    當然,如果您是死硬派!硬漢!堅持要動手寫!
          在 project.json設定檔裡面,也可以透過智慧選字(IntelliSense),會自動跳字讓您填寫。

(5). 程式碼大致如下:

                //== 方法一 ==   
                string connectionString = @"server=.\sqlexpress;integrated security=SSPI;database=我的資料庫名稱";
                var conn = new SqlConnection(connectionString);
                conn.Open();
                // Do something useful
                await context.Response.WriteAsync("
資料庫連結成功");
                conn.Close();
               //== 當然,我們可以把資料庫的連結字串,寫在設定檔裡面。例如 appsettings.json設定檔,下一篇文章 為您解說。
              //{
              //  "ConnectionStrings": {
              //    "DefaultConnection": "Server=.\\sqlexpress;Database=我的資料庫名稱;Trusted_Connection=True;MultipleActiveResultSets=true"
              //  }
              //}

==========================================================================

Q :  ADO.NET怎麼只剩下 DataReader了?以前慣用的 DataSet呢?

詳見這篇文章的說明 (2016/2/10發表)  https://blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core/
System.Data. While the base layer is already part of .NET Core, i.e. the provider model and SQL client, some features are currently not available, such as schema support and DataTable/DataSet.

System.Transactions. While ADO.NET supports transactions, there is no support for distributed transactions, which includes the notion of ambient transactions and enlistment. (您可以參閱我這本書 -- 深入探索 .NET資料存取:ADO.NET + SqlDataSource+ LINQ (松崗),有討論 System.Transaction)


System.Net.Mail. There is currently no support for sending emails from .NET Core using these APIs.
目前 Core 1.0 不支援,不代表以後不支援。所以也不用太絕望....等等看吧......

下一篇文章:

ASP.NET Core & ADO.NET 入門 #2 -- 讀取appsettings.json設定檔與參數的寫法(SqlCommand)

http://mis2000lab.blogspot.tw/2016/12/aspnet-core-adonet-2.html 

我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

寫信給我--  mis2000lab (at) yahoo.com.台灣  或是  school (at) mis2000lab.net
................   facebook社團   https://www.facebook.com/mis2000lab   ......................
................   Google+   https://plus.google.com/100202398389206570368/posts ........
................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ

ASP.NET Core & ADO.NET 入門 #2 -- 讀取appsettings.json設定檔與參數的寫法(SqlCommand)

ASP.NET Core & ADO.NET 入門 #2 -- 讀取appsettings.json設定檔與參數的寫法(SqlCommand)


ASP.NET Core & ADO.NET 入門 #2 --
1. 讀取appsettings.json設定檔
2. 參數的寫法(SqlCommand)
3. 解決中文亂碼問題

==========================================================================
YouTube教學影片 -- https://youtu.be/1UaO8C2MnJQ

==========================================================================

我們通常把資料庫的連結字串,統一存放在一個設定檔裡面
例如 Windows Form的 App.Config設定檔
或是 Web Form的 Web.Config設定檔
在ASP.NET Core(網頁)專案裡面就是 appsettings.json設定檔

為了讀取這個設定檔,您需要加入的 Microsoft.Extensions.Configuration命名空間
別忘了在 project.json 也要這加入這些套件

我本來想說「加入參考」,
但想想這是 ASP.NET Web Form的詞彙,用在ASP.NET Core不知道適當否?
不過,希望您大概知道是類似的動作
............................................................................................................................
如同上一篇文章的操作說明,透過 Visula Studio「新增封裝....」讓系統自動幫您加進去,最簡便了
***  命名空間(NameSpace) ***
using System.Data.SqlClient;
using Microsoft.Extensions.Configuration;

***  程式碼如下 ***
                //== 方法一 ==  上一篇文章介紹過了
                //string connectionString = @"server=.\sqlexpress;integrated security=SSPI;database=test";
                //== 方法二 == 改成appsettings.json
                var configurationBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
                //  讀取設定檔的內容
                IConfiguration config = configurationBuilder.Build();
                string connectionString = config["ConnectionStrings:DefaultConnection"];
                var Conn = new SqlConnection(connectionString);
                Conn.Open();

重點!!!!!!!!!  
請在project.json裡面加上這一句話,才能讀取 appsettings.json設定檔
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true,
    "copyToOutput": "appsettings.json"
  },
  .... The rest of the file goes here .... 詳見 https://colinmackay.scot/2016/07/03/application-configuration-in-net-core-part-1/


             
您也可以在原廠說明網站上看見,搜尋「ASP.NET Core appsettings.json」關鍵字就能找到              
https://docs.asp.net/en/latest/fundamentals/configuration.html#getting-and-setting-configuration-settings
不過,說真的,我看不懂   @_@

之前參考 Wrox出版的那本書,他是用 Windows Form來解說 .NET Core
但改成 ASP.NET Core,在讀取設定檔的時候,似乎有點差異
這裡我卡住比較久的時間,希望對您有幫助
............................................................................................................................

接下來,可以繼續做 DataReader + SqlCommand的工作了
程式碼大致如下:
這裡有兩大問題:
第一,「參數」的寫法與防範資料隱碼(SQL Injection)攻擊
寫法跟以前 ADO.NET大同小異,相信您一看就會了
                var Conn = new SqlConnection(connectionString);
                Conn.Open();
             
                //重點!參數的寫法!
                var Com = new SqlCommand("Select title from test Where id = @ID", Conn);
                Com.Parameters.AddWithValue("ID", 3);   // 您要分開寫成 .Add()方法與 Value屬性,也是可以運作的,跟以前的寫法雷同
                             
                using (SqlDataReader dr = Com.ExecuteReader())
                {
                    while (dr.Read())
                    {    // (1). 中文亂碼的解決 -- 瀏覽器的編碼,請改成 UTF-8
                        var title = dr["title"];
                        await context.Response.WriteAsync("
" + title + "

");
                    }
                }
                Conn.Close();

第二,讀出的數據,在瀏覽器上面變成亂碼 (啥!? 中文亂碼問題)
這裡也很傷腦筋。
有兩種方法可以解決。
***  一個是在 User (Client端)的瀏覽器上,重新設定「編碼」,例如改成UTF-8就能解決。
      這種解法不好,User一定會吵。而且大部分的 User不會設定瀏覽器的編碼.....相信我! User不是那麼厲害

***   另一個則是寫程式去處理亂碼問題
                using (SqlDataReader dr = Com.ExecuteReader())
                {
                    while (dr.Read())
                    {   // (2). 中文亂碼的解決 -- 不用修改瀏覽器的編碼。請加入 System.Text.Encodings.Web 命名空間
                        var title2 = HtmlEncoder.Default.Encode(dr["title"].ToString());
                        await context.Response.WriteAsync("
" + title2 + "

");
                    }
                }
                Conn.Close();
不過,您要使用 HtmlEncoder來處理,當然也得先加入 System.Text.Encodings.Web命名空間與相關套件

這裡卡住我比較多的時間,希望分享出來,對您有幫助
謝謝  :-)

昨天(2016/8/29) 晚上,我把這兩篇文章的完整內容寫好了,並轉成PDF檔(電子書)與讀者分享
只要您有購買下面這本書,就能免費獲得這一章。

希望對您有幫助。

[團購] 深入探索 .NET資料存取:ADO.NET + SqlDataSource+ LINQ (松崗)

我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

寫信給我--  mis2000lab (at) yahoo.com.台灣  或是  school (at) mis2000lab.net
................   facebook社團   https://www.facebook.com/mis2000lab   ......................
................   Google+   https://plus.google.com/100202398389206570368/posts ........
................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ

2016年12月20日 星期二

[台北科大 分享會] 開源的ASP.NET Core & ADO.NET

2017/01/11 週三 晚上 19:30~21:00   人數足夠,確定開講   即將額滿      
2017/01/18 週三 晚上 19:30~21:00   招生中      

課程主題:開源的ASP.NET Core & ADO.NET


本次分享會的宗旨:
    「實用」、「簡單明瞭」、「實作」、「即戰力」
    不只是放放投影片混一個小時而已,希望有一個真正的範例作給大家看,您也可以跟著做
    而且 "入門"範例,可以讓大家感受到 "實用" 且 "學得會"。 自己聽得懂、做得到,才有幫助!

課程大綱 & 內容:  
      (講師: MIS2000 Lab.,微軟MVP 2008~2016)
      (課程約一小時,後續半小時為自由討論、分享、認識人脈的時間)
  1. .NET開源(開放原始碼)
  2. 從 ASP.NET 5 到 ASP.NET Core
  3. 實際範例解說,使用Visual Studio (建議VS 2015 Update 3或後續新版本)
  4. Q & A,課後討論時間
  5. Bonus 福利 -- 社群分享、認識朋友、工作轉介 (分享.NET的工作機會與職缺)

參與人數:15人(現場沒有電腦教室。請自備NB 或是 兩手空空也行,帶著 輕鬆的心情 過來即可)
      分享會的內容,並非「從零講起」,未必適合毫無基礎的初學者(但如果您堅持要來旁聽,也歡迎)
      希望是業界、現役的工程師一起參與
      至少聽課以前,看過 DataReader這篇文章 https://dotblogs.com.tw/mis2000lab/archive/2008/04/24/3446.aspx

地  點:台北科大 育成中心  (捷運 忠孝新生站,鄰近光華商場)  http://incu.ntut.edu.tw/files/15-1036-4233,c929-1.php?Lang=zh-tw
            臺北市大安區忠孝東路三段1號(光華館 3樓)    
         【註】八德路 v.s. 新生南路口側門入校第一棟(光華館)

            感恩 台北科大育成中心&聖森股份有限公司 提供場地

費用:六百元,並贈送書籍一本ASP.NET學習教材 - 使用C# [第二版]。松崗出版)
      本次分享會的內容,在這本書的「第23章  ASP.NET Core與ADO.NET簡易入門」剛好就有。
      所以您現場不用作筆記,都幫您整理好了。
收取費用的原因:  希望「有決心」的人才來報名,不要報了名卻不來。
      ** 如果人數不足、主辦單位臨時取消或無法成行,開課日前一週告知。將無息、無扣手續費,以ATM退款給您。
      ** 如果確定舉辦,您卻無法參加,費用無法退還、贈品無法寄送。建議您私下將此名額轉讓給別人。
      如果收費有盈餘,將補貼講師車馬費與餐費等等。

人數有限,不提供預約。    一律完成繳費才算報名成功!
務必填寫報名表,來信報名 。我會回信通知下列資訊若非以下資料,皆屬詐騙,請小心!
我的電話是 0975-696-XXX
我的「銀行帳號」---- 
    台北富邦銀行(012),帳號後六碼是xxx-xxx-388-785
    (怕有詐騙集團出面劫標,我先公佈一部份。請大家留意!)
  
 有任何問題,都請您來信  mis2000lab (at) yahoo.com.tw  或是 school (at) mis2000lab.net
姓名
E-Mail(盡量留自己的,而非公司)
電話方便聯絡的時間
目前所在公司或學校
 **必填**
其他需求,或您想跟我詢問的?
自己:
公司:
家:
手機:

  ****必填 ****



如果您報名時,沒有留下個人資料。臨時有突發狀況(如無法舉辦或颱風假等緊急因素)而無法通知到您,視同您不參與、自動放棄所有權利。
當然也不退費、不補發贈品。
人數有限,不提供預約。    一律完成繳費才算報名成功!

我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
寫信給我--  mis2000lab (at) yahoo.com.台灣  或是  school (at) mis2000lab.net
................   facebook社團   https://www.facebook.com/mis2000lab   ......................
................   Google+   https://plus.google.com/100202398389206570368/posts ........
................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ