[C#] 如何呼叫App.config參數? / 如何連接資料庫,撈資料出來?

  • 152
  • 0
  • C#
  • 2023-12-29

以console winform為例

1.先在 App.config 寫好參數 (密碼不建議寫在這)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
	<appSettings>
		<add key="DataSource" value="192.168.??.??"/>
		<add key="DataBaseCatalog" value="xxDB"/>
		<add key="DataBaseUser" value="xxDBAdmin"/>
		<add key="DataBasePassword" value="myPwd"/>
		<add key="EmailServer" value="192.168.??.??"/>
		<add key="EmailFrom" value="yourmail@company.com.tw"/>
		<add key="EmailFromDisplayName" value="SystemManager"/>
	</appSettings>
</configuration>

2.方案總管 > 參考 > 加入參考 > 找一下,勾選 System.Configuartion > 確認 

3.去網上下載Dapper.dll,將其加入參考,可能會查到三個版(2.0 / 4.0 / 5.0),這邊因 Framework 是4.x,所以加入 dapper 4.0的。 (有錯請指正)
   就可以使用簡易的SQL語法了。

//部分程式片段 - 示範Query
queryStr = "SELECT EmployeeNo, EmployeeName, Email FROM Employee WITH (NOLOCK) WHERE Email IS NOT NULL";
List<Employee> empList = con.Query<Employee>(queryStr).ToList();

4.以下完整範例

//SqlHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using Dapper;
using System.Configuration;

namespace SendMail
{
    class SqlHelper
    {
        private string DataSourceValue = ConfigurationManager.AppSettings["DataSource"]; // 記錄資料庫位置
        private string DataBaseCatalogValue = ConfigurationManager.AppSettings["DataBaseCatalog"]; // 記錄資料庫名稱
        private string DataBaseUserValue = ConfigurationManager.AppSettings["DataBaseUser"]; // 記錄資料庫使用者名稱
        private string DataBasePasswordValue = ConfigurationManager.AppSettings["DataBasePassword"];

        /// <summary>
        /// 取得MSSQL 連線字串
        /// </summary>
        /// <returns></returns>
        public string getConnectionBuilderString() 
        {
    	    StringBuilder ConnectionBuilder = new StringBuilder();
    	    ConnectionBuilder.AppendLine("Data Source=" + DataSourceValue + ";");
    	    ConnectionBuilder.AppendLine("Pooling=False;");
    	    ConnectionBuilder.AppendLine("Max Pool Size = 1024;");
    	    ConnectionBuilder.AppendLine("Initial Catalog=" + DataBaseCatalogValue + ";");
    	    ConnectionBuilder.AppendLine("Persist Security Info=True;");
    	    ConnectionBuilder.AppendLine("User ID=" + DataBaseUserValue + ";");
    	    ConnectionBuilder.AppendLine("Password=" + DataBasePasswordValue);

    	    string connectionString = ConnectionBuilder.ToString();
    	    return connectionString.ToString();
        }
    }
}
//Class_DataTable.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SendMail
{
	internal class Employee
	{
		public string EmployeeNo { get; set; }
		public string EmployeeName { get; set; }
		public string Email { get; set; }
	}
}
//Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Diagnostics;
using System.Data.SqlClient;
using Dapper;

namespace SendMail
{
    internal class Program
    {
        static void Main(string[] args)
        {
        	List<Employee> tbl;
        	queryMailList(out tbl);
        }
        
        /// <summary>
        /// 取得 Employee 資料表內容
        /// </summary>
        /// <returns></returns>
        static void queryMailList(out List<Employee> tbl)
        {
            SqlHelper sqlHelper = new SqlHelper();
            string connectionString = sqlHelper.getConnectionBuilderString();
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                con.Open();

                string queryStr;
                queryStr = "SELECT EmployeeNo, EmployeeName, Email FROM Employee WITH (NOLOCK) WHERE Email IS NOT NULL";
                var tmp = con.Query<Employee>(queryStr).ToList();
                tbl= con.Query<Employee>(queryStr).ToList();

                con.Close();
            }
        }
    }
}

PS.速記,可能會有小BUG,還請海含指教,感謝..