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

ASP.NET Core & ADO.NET 入門 #2 --

1. 讀取appsettings.json設定檔

2. 參數的寫法(SqlCommand)

3. 解決中文亂碼問題

 


延續上一篇文章:ASP.NET Core & ADO.NET 入門 #1 -- 資料庫連結(SqlConnection)
https://dotblogs.com.tw/mis2000lab/2016/08/29/aspnet_core_adonet_begin_01

 

提醒您,如果您採用 VS 2017,本文提到的操作步驟與程式碼都有異動

請看這裡 (VS 2017版) -- http://mis2000lab.pixnet.net/blog/post/34620161

 

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

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

不過,說真的,我看不懂   @_@

我是在這篇文章看見解答的,也提供給您參考
http://stackoverflow.com/questions/38282652/asp-net-core-1-0-configurationbuilder-addjsonfileappsettings-json-not-fin

 

之前參考 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("<br />" + title + "<hr />");
                    }
                }

                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("<br />" + title2 + "<hr />");
                    }
                }

                Conn.Close();

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

 

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

 

昨天(2016/8/29) 晚上,我把這兩篇文章的完整內容寫好了,並轉成PDF檔(電子書)與讀者分享

只要您有購買下面這本書,就能免費獲得這一章。

 

或是加入我的臉書 https://www.facebook.com/mis2000lab/   可以看到這一章(PDF檔)如何下載

希望對您有幫助。

[團購] 深入探索 .NET資料存取:ADO.NET + SqlDataSource+ LINQ (松崗)
https://dotblogs.com.tw/mis2000lab/2016/07/25/dotnet_access_adonet_book_2016

 

提醒您,如果您採用 VS 2017,本文提到的操作步驟與程式碼都有異動

請看這裡 (VS 2017版) -- http://mis2000lab.pixnet.net/blog/post/34620161

 

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程教學,遠距教學 (Web Form 約 51hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程教學,遠距教學 (ASP.NET MVC 約 140hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.tw  或  school (at) mis2000lab.net

 (1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A 

 (2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I 

[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm  。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b  


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

.........   facebook社團   https://www.facebook.com/mis2000lab   ......................

.........  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)。

...................................................................................................................................................... 

ASP.NET MVC  => .NET Core MVC 線上教學  ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講   事先錄好的影片,並非上課側錄!   觀看時,有如「一對一」面對面講課