2017年8月21日 星期一

[C#] Dapper using sql file

  • 因許多人在查尋 SQL 會使用組字串或者變數的方式來進行查尋
    • Code-組字串
    StringBuilder sb = new StringBuilder();
    sb.Append("SELECT ");
    sb.Append("* ");
    sb.Append("FROM ");
    sb.Append("UserInfo");
    C#
    • Code-變數
    static string sqlQuery
    {
        get
        {
            return "SELECT * FROM UserInfo";
        }
    }
    C#
    • 目前查尋都是簡短,需要使用複雜的查尋或者其他行為,會使得 SQL 語法變得非常長,且不容易閱讀
  • 此使用 Resource File  的特性,進行改善此方法
    • 加入 Resources 資料夾在專案中
    • 加入 sql 的檔案,並輸入 SQL 語法
    • 將此檔案加入 Resource File
    • Demo Code
    class User
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            List<user> lUser = null;
    
            using (SqlConnection con = new SqlConnection(Info.LyndonliuConnectionString))
            {
                lUser = con.Query<user>(
                   Properties.Resources.ActionUserInfo,
                   commandTimeout: 0).ToList();
            }
        }
    }
    C#
  • 如需撰寫複雜的 SQL 語法(如:當資料存在進行修改,資料不存在進行新增)
    • SQL Code - 修改 ActionUserInfo.sql 如下
    -- EXISTS
    IF EXISTS
      (SELECT *
       FROM UserInfo
       WHERE Name = @Name)
    -- UPDATE
    UPDATE UserInfo
    SET Age = @Age
    WHERE Name = @Name;
    ELSE
    -- INSERT
    INSERT INTO UserInfo
    VALUES (@Name,
            @Age);
    SQL
    • C# Code
    class User
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            User user = new User { Name = "Lyndon", Age = 31 };
    
            using (SqlConnection con = new SqlConnection(Info.LyndonliuConnectionString))
            {
                DynamicParameters Param = new DynamicParameters();
                Param.Add("@Name", user.Name, dbType: DbType.String);
                Param.Add("@Age", user.Age, dbType: DbType.Int32);
    
                int count = con.Execute(
                   Properties.Resources.ActionUserInfo,
                   Param,
                   commandTimeout: 0);
            }
        }
    }
    C#
  • 此方法雖然簡化許多,並且使 SQL語法是可以閱讀,但開發者需知道 SQL 語法所撰寫的地方,才能進行修改

沒有留言:

張貼留言