/// <summary>
        /// 依照搜尋條件取得App資料
        /// </summary>
        /// <param name="amad"></param>
        /// <returns></returns>
        public List <Model.StringResult> GetAppSearch(Model.AppMarketingAnalysisData amad, string target)
        {
            DataTable dt = new DataTable();
            List <Model.StringResult> result = new List <Model.StringResult>();
            string sql = "";

            if (target == "AppGrid")
            {
                sql = @"SELECT TOP 100 APP_NAME, CATEGORY, RATING, RATING_COUNT, INSTALLS_RANGE, FREE
                        FROM AppMarketingAnalysisData as AMAD
                        WHERE (APP_NAME = @APP_NAME OR @APP_NAME='')
                          AND ((RATING >= @RATING1 AND RATING <= @RATING2) OR (@RATING2 = 0))
                          AND ((RATING_COUNT >= @RATING_C1 AND RATING_COUNT <= @RATING_C2) OR (@RATING_C2 = 0))
                          AND RATING != @RATING_NO";
                sql = ListParaToSql(sql, amad, "CATEGORY");
                sql = ListParaToSql(sql, amad, "FREE");
                sql = ListParaToSql(sql, amad, "INSTALLS_RANGE");

                using (SqlConnection conn = new SqlConnection(this.GetDBConnectionString()))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sql, conn);

                    //APP名稱
                    cmd.Parameters.Add(new SqlParameter("@APP_NAME", amad.APP_NAME == null ? string.Empty : amad.APP_NAME));
                    //評分
                    cmd.Parameters.Add(new SqlParameter("@RATING1", amad.RATING[0]));
                    cmd.Parameters.Add(new SqlParameter("@RATING2", amad.RATING[1]));
                    //未評分
                    cmd.Parameters.Add(new SqlParameter("@RATING_NO", amad.NO_RATING == null ? 0 : -1));
                    //評分數量
                    cmd.Parameters.Add(new SqlParameter("@RATING_C1", amad.MIN_RATING_COUNT));
                    cmd.Parameters.Add(new SqlParameter("@RATING_C2", amad.MAX_RATING_COUNT));

                    SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd);
                    Console.WriteLine(cmd.CommandText);
                    sqlAdapter.Fill(dt);
                    conn.Close();
                }
                foreach (DataRow row in dt.Rows)
                {
                    result.Add(new AppMarketingAnalysis.Model.StringResult()
                    {
                        APP_NAME       = row["APP_NAME"].ToString(),
                        CATEGORY       = row["CATEGORY"].ToString(),
                        RATING         = row["RATING"].ToString(),
                        RATING_COUNT   = row["RATING_COUNT"].ToString(),
                        INSTALLS_RANGE = row["INSTALLS_RANGE"].ToString(),
                        FREE           = row["FREE"].ToString()
                    });
                }
            }
            else if (target == "Chart1")
            {
                //sql = @"SELECT TOP 1000 category,rating,free
                sql = @"SELECT top 100000 category,rating,case when free = 'TRUE' then 'true' else 'false' end as free
                        FROM AppMarketingAnalysisData as AMAD 
                        WHERE ((RATING_COUNT >= @RATING_C1 AND RATING_COUNT <= @RATING_C2) OR (@RATING_C2 = 0))
                          AND ((PRICE >= @PRICE_1 AND PRICE <= @PRICE_2) OR (@PRICE_2 = 0))
                        ";
                sql = ListParaToSql(sql, amad, "CATEGORY");
                sql = ListParaToSql(sql, amad, "FREE");
                sql = ListParaToSql(sql, amad, "INSTALLS_RANGE");

                using (SqlConnection conn = new SqlConnection(this.GetDBConnectionString()))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sql, conn);

                    //評分數量
                    cmd.Parameters.Add(new SqlParameter("@RATING_C1", amad.MIN_RATING_COUNT));
                    cmd.Parameters.Add(new SqlParameter("@RATING_C2", amad.MAX_RATING_COUNT));
                    //APP價格
                    cmd.Parameters.Add(new SqlParameter("@PRICE_1", amad.MIN_PRICE));
                    cmd.Parameters.Add(new SqlParameter("@PRICE_2", amad.MAX_PRICE));

                    SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd);
                    sqlAdapter.Fill(dt);
                    conn.Close();
                }
                foreach (DataRow row in dt.Rows)
                {
                    result.Add(new AppMarketingAnalysis.Model.StringResult()
                    {
                        category = row["category"].ToString(),
                        rating   = row["rating"].ToString(),
                        free     = row["free"].ToString()
                    });
                }
            }
            else if (target == "Chart2")
            {
                sql = @"SELECT TOP 100000 category,rating_count as ratingcount
                        FROM AppMarketingAnalysisData as AMAD
                        WHERE ((RATING_COUNT >= @RATING_C1 AND RATING_COUNT <= @RATING_C2) OR (@RATING_C2 = 0))
                          AND ((PRICE >= @PRICE_1 AND PRICE <= @PRICE_2) OR (@PRICE_2 = 0))
                        ";
                sql = ListParaToSql(sql, amad, "CATEGORY");
                sql = ListParaToSql(sql, amad, "FREE");
                sql = ListParaToSql(sql, amad, "INSTALLS_RANGE");

                using (SqlConnection conn = new SqlConnection(this.GetDBConnectionString()))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sql, conn);

                    //評分數量
                    cmd.Parameters.Add(new SqlParameter("@RATING_C1", amad.MIN_RATING_COUNT));
                    cmd.Parameters.Add(new SqlParameter("@RATING_C2", amad.MAX_RATING_COUNT));
                    //APP價格
                    cmd.Parameters.Add(new SqlParameter("@PRICE_1", amad.MIN_PRICE));
                    cmd.Parameters.Add(new SqlParameter("@PRICE_2", amad.MAX_PRICE));

                    SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd);
                    sqlAdapter.Fill(dt);
                    conn.Close();
                }
                foreach (DataRow row in dt.Rows)
                {
                    result.Add(new AppMarketingAnalysis.Model.StringResult()
                    {
                        category    = row["category"].ToString(),
                        ratingcount = row["ratingcount"].ToString()
                    });
                }
            }
            else if (target == "Chart3")
            {
                sql = @"SELECT TOP 100000 category,INSTALLS_COUNT as installs, DEVELOPER_ID as developerId 
                        FROM AppMarketingAnalysisData as AMAD 
                        WHERE ((PRICE >= @PRICE_1 AND PRICE <= @PRICE_2) OR (@PRICE_2 = 0))
                        ";
                sql = ListParaToSql(sql, amad, "CATEGORY");
                sql = ListParaToSql(sql, amad, "FREE");
                sql = ListParaToSql(sql, amad, "INSTALLS_RANGE");

                using (SqlConnection conn = new SqlConnection(this.GetDBConnectionString()))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sql, conn);

                    //APP價格
                    cmd.Parameters.Add(new SqlParameter("@PRICE_1", amad.MIN_PRICE));
                    cmd.Parameters.Add(new SqlParameter("@PRICE_2", amad.MAX_PRICE));

                    SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd);
                    sqlAdapter.Fill(dt);
                    conn.Close();
                }
                foreach (DataRow row in dt.Rows)
                {
                    result.Add(new AppMarketingAnalysis.Model.StringResult()
                    {
                        category    = row["category"].ToString(),
                        installs    = row["installs"].ToString(),
                        developerId = row["developerId"].ToString()
                    });
                }
            }
            else if (target == "Chart4")
            {
                sql = @"SELECT TOP 100000 category,INSTALLS_COUNT as maximumInstalls,RATING_COUNT as ratingcount,price  
                        FROM AppMarketingAnalysisData as AMAD 
                        WHERE ((RATING_COUNT >= @RATING_C1 AND RATING_COUNT <= @RATING_C2) OR (@RATING_C2 = 0))
                          AND ((PRICE >= @PRICE_1 AND PRICE <= @PRICE_2) OR (@PRICE_2 = 0))
                        ";
                sql = ListParaToSql(sql, amad, "CATEGORY");
                sql = ListParaToSql(sql, amad, "INSTALLS_RANGE");

                using (SqlConnection conn = new SqlConnection(this.GetDBConnectionString()))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sql, conn);

                    //評分數量
                    cmd.Parameters.Add(new SqlParameter("@RATING_C1", amad.MIN_RATING_COUNT));
                    cmd.Parameters.Add(new SqlParameter("@RATING_C2", amad.MAX_RATING_COUNT));
                    //APP價格
                    cmd.Parameters.Add(new SqlParameter("@PRICE_1", amad.MIN_PRICE));
                    cmd.Parameters.Add(new SqlParameter("@PRICE_2", amad.MAX_PRICE));

                    SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd);
                    sqlAdapter.Fill(dt);
                    conn.Close();
                }
                foreach (DataRow row in dt.Rows)
                {
                    result.Add(new AppMarketingAnalysis.Model.StringResult()
                    {
                        category        = row["category"].ToString(),
                        maximumInstalls = row["maximumInstalls"].ToString(),
                        ratingcount     = row["ratingcount"].ToString(),
                        price           = row["price"].ToString()
                    });
                }
            }
            else if (target == "Chart5")
            {
                sql = @"SELECT TOP 100000 category,RELEASED as Released 
                        FROM AppMarketingAnalysisData as AMAD
                        WHERE ((PRICE >= @PRICE_1 AND PRICE <= @PRICE_2) OR (@PRICE_2 = 0))
                          AND ( RELEASED >= @RELEASED_1 AND RELEASED<= @RELEASED_2)
                        ";
                sql = ListParaToSql(sql, amad, "CATEGORY");
                sql = ListParaToSql(sql, amad, "FREE");
                sql = ListParaToSql(sql, amad, "INSTALLS_RANGE");

                using (SqlConnection conn = new SqlConnection(this.GetDBConnectionString()))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sql, conn);

                    //APP價格
                    cmd.Parameters.Add(new SqlParameter("@PRICE_1", amad.MIN_PRICE));
                    cmd.Parameters.Add(new SqlParameter("@PRICE_2", amad.MAX_PRICE));
                    //APP發行日期
                    cmd.Parameters.Add(new SqlParameter("@RELEASED_1", amad.MIN_RELEASED));
                    cmd.Parameters.Add(new SqlParameter("@RELEASED_2", amad.MAX_RELEASED));

                    //cmd.Parameters.Add(new SqlParameter("@APP_NAME", amad.APP_NAME == null ? string.Empty : amad.APP_NAME));
                    SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd);
                    sqlAdapter.Fill(dt);
                    conn.Close();
                }
                foreach (DataRow row in dt.Rows)
                {
                    result.Add(new AppMarketingAnalysis.Model.StringResult()
                    {
                        category = row["category"].ToString(),
                        Released = row["Released"].ToString()
                    });
                }
            }
            else if (target == "Chart6")
            {
                //sql = @"SELECT TOP 1000 category, INSTALLS_COUNT as install, free
                sql = @"SELECT TOP 100000 category, INSTALLS_COUNT as install, case when free = 'TRUE' then 'true' else 'false' end as free
                        FROM AppMarketingAnalysisData as AMAD 
                        WHERE (1 = 1 ) 
                        ";
                sql = ListParaToSql(sql, amad, "CATEGORY");
                sql = ListParaToSql(sql, amad, "INSTALLS_RANGE");

                using (SqlConnection conn = new SqlConnection(this.GetDBConnectionString()))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sql, conn);

                    //APP價格
                    cmd.Parameters.Add(new SqlParameter("@PRICE_1", amad.MIN_PRICE));
                    cmd.Parameters.Add(new SqlParameter("@PRICE_2", amad.MAX_PRICE));

                    SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd);
                    sqlAdapter.Fill(dt);
                    conn.Close();
                }
                foreach (DataRow row in dt.Rows)
                {
                    result.Add(new AppMarketingAnalysis.Model.StringResult()
                    {
                        category = row["category"].ToString(),
                        free     = row["free"].ToString(),
                        install  = row["install"].ToString()
                    });
                }
            }
            return(result);
        }
 /// 處理sql參數的陣列
 private string ListParaToSql(string sql, Model.AppMarketingAnalysisData amad, string target)
 {
     //分類
     if (target == "CATEGORY")
     {
         if (amad.CATEGORY == null)
         {
             return(sql);
         }
         string SQLstart = @" AND UPPER(CATEGORY) IN (UPPER(' ";
         string SQLend   = @"')) ";
         for (int i = 0; i < amad.CATEGORY.Length; i++)
         {
             if (i != 0)
             {
                 SQLstart += @"'), UPPER('";
             }
             SQLstart += amad.CATEGORY[i];
         }
         sql = sql + SQLstart + SQLend;
     }
     //下載數量範圍
     else if (target == "INSTALLS_RANGE")
     {
         if (amad.MAX_INSTALLS_RANGE == null || amad.MIN_INSTALLS_RANGE == null)
         {
             return(sql);
         }
         List <string> range = new List <string> {
             "0+", "1+", "10+", "100+", "1,000+", "10,000+",
             "100,000+", "1,000,000+", "10,000,000+",
             "100,000,000+", "1,000,000,000+"
         };
         int s = new int();
         int e = new int();
         for (int i = 0; i < range.Count; i++)
         {
             if (amad.MIN_INSTALLS_RANGE == range[i])
             {
                 s = i;
             }
             if (amad.MAX_INSTALLS_RANGE == range[i])
             {
                 e = i;
             }
         }
         string SQLAdd = @" AND INSTALLS_RANGE IN ('";
         for (int i = s; i <= e; i++)
         {
             if (i != 0)
             {
                 SQLAdd += @"','";
             }
             SQLAdd += range[i];
         }
         SQLAdd += @"') ";
         sql    += SQLAdd;
     }
     //APP是免費還是付費
     else if (target == "FREE")
     {
         if (amad.FREE == null)
         {
             return(sql);
         }
         string SQLAdd = @" AND FREE IN ('";
         for (int i = 0; i < amad.FREE.Length; i++)
         {
             if (i != 0)
             {
                 SQLAdd += @"', '";
             }
             SQLAdd += amad.FREE[i];
         }
         SQLAdd += @"') ";
         sql    += SQLAdd;
     }
     return(sql);
 }