Winform Core 創建連線字串

Winform在Core內因為沒有自帶App.config,所以要自行建立,但網上大多教學是創建appsetting.json居多,因此嘗試著用此方式建立連線字串。

首先要先新增一個josn檔,命名為appsettings.json,這個命名據說是大小寫不要改動比較好,所以我就沒有將其命名為大寫開頭的Appsettings。

接著很重要的一點,也是因為這點沒改,我一直測試失敗,改了之後就好了,那就是將.json檔的屬性內的「複製到輸出目錄」改為「永遠複製」。

這個沒改的話,接下來的連線字串會一直讀到null。

接著設定appsettings,json的連線字串:

{
  "ConnectionStrings": {
    "ERPDB": "Data Source=IP;Initial Catalog=DBName;Persist Security Info=True;User ID=DBUserID;Password=DBPassword"
    "SYSDB": "Data Source=IP;Initial Catalog=DBName;Persist Security Info=True;User ID=DBUserID;Password=DBPassword"
    ...以此方式增加
  }
}

接著設定連線的Class,比如我命名了一個Class_ForSQL.cs,然後在檔案內設置我的連線字串:

using System.Data.SqlClient;
using Microsoft.Extensions.Configuration;
using System.Windows.Forms;
using System.IO;

namespace WinFormsApp1
{
    class Class_ForSQL
    {
        private readonly IConfiguration Config;
        private readonly string DBERP;

        public Class_ForSQL()
        {
            var Builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
            Config = Builder.Build();
            DBERP = Config.GetConnectionString("ERPDB");
        }
	}
}

這邊要特別注意的是,System.Data.SqlClient與Microsoft.Extensions.Configuration直接using是無法直接宣告的,需要在NuGet下載:

本以為這樣就好了,但發現AddJsonFile無法使用,於是又下載了Microsoft.Extensions.Configuration.json才能使用,但特別的是,它並不需要using。

接著就可以在剛才的Class_ForSQL內新增查詢的Function了,這邊就Framework內怎麼寫,就幾乎是照著寫(連線字串的地方直接使用變數即可):

        public DataTable FindEm(string em)
        {
            DataTable dt = new DataTable();
            using (SqlConnection conn = new SqlConnection(DBERP))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(@"select EmID 員工編號,EmName 員工姓名 from Em where EmID=@Em", conn);
                cmd.Parameters.AddWithValue("@Em", em);
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                adapter.Fill(dt);
            }
            return dt;
        }

寫完之後測試一下呼叫連線字串是否能正常使用:

發現DataGridView能正確抓到Class內的DataTable做為資料來源,那就OK了~

只是個路過的新手,發文有誤請告知。