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");
    
    • Code-變數
    
            static string sqlQuery
            {
                get
                {
                    return "SELECT * FROM UserInfo";
                }
            }
    • 目前查尋都是簡短,需要使用複雜的查尋或者其他行為,會使得 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();
                }
            }
        }
    
  • 如需撰寫複雜的 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);
    
    • 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);
                }
            }
        }
    
  • 此方法雖然簡化許多,並且使 SQL語法是可以閱讀,但開發者需知道 SQL 語法所撰寫的地方,才能進行修改

沒有留言:

張貼留言