iT邦幫忙

0

如何使用Dapper將前台丟YYYYMM去呼叫SP

  • 分享至 

  • xImage

Hi 各位前輩大家好

目前想寫個選取可複選下拉式選單(年月)。按下button後,去call資料庫的資料取得報表結果,目前使用ASP.NET MVC(MVC5)開發。以下問題想請教各位大神:
(1)前端的網頁是YYYYMM(年月格式),使用TagBox標籤框(有點像可複選的下拉式選單)。如果想要寫Stored Procedure去處理報表。如何克服 想複選單月、多個月(e.g. user可選202203的報表或是202203+202202的報表)的問題,以及設定SP的參數?
(2)如果想使用Dapper + Stored Procedure。如何將前端丟參數(YYYYMM) call SP呢?

前端頁面
https://ithelp.ithome.com.tw/upload/images/20220413/20147842HV6wbSNk1J.png

model

public class SDDapperORM
    {
        
        private static string connectionString2 = @"Data Source =localhost; Initial Catalog=SALESDB; Integrated Security=False;User ID=帳號;Password=密碼;";

      
        public static void ExecuteWithoutReturn2(string procedureName, DynamicParameters param = null)
        {
            using (SqlConnection con = new SqlConnection(connectionString2))
            { //執行stored procedure
                con.Open();
                con.Execute(procedureName, param, commandType: CommandType.StoredProcedure);
            }
        }

       
        public static T ExecuteReturnScalar2<T>(string procedureName, DynamicParameters param = null)
        {
            using (SqlConnection con = new SqlConnection(connectionString2))
            {
                con.Open();
                return (T)Convert.ChangeType(con.ExecuteScalar(procedureName, param, commandType: CommandType.StoredProcedure), typeof(T));
            }
        }


        public static IEnumerable<T> ReturnList2<T>(string procedureName, DynamicParameters param = null)
        {
            using (SqlConnection con = new SqlConnection(connectionString2))
            {
                con.Open();
                return con.Query<T>(procedureName, param, commandType: CommandType.StoredProcedure);
            }
        }
    
    }

使用以下工具開發:
Visual Studio 2019
SQL 2019
.Net framework 4.6.1

https://stackoverflow.com/questions/5962117/is-there-a-way-to-call-a-stored-procedure-with-dapper
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
小魚
iT邦大師 1 級 ‧ 2022-04-15 20:44:21

不是Execute嗎?

(1)目前想到可能用兩個參數 @參數1 開始日期 @參數2 結束日期。當前端送出YYYYMM(比如202202)後,程式拆成2022-02-01, 2022-03-01,再用這兩個參數去執行sp
(2)目前有找到解法就是用參數物件用new DynamicParameters。然後去Exucute預存程序沒錯
比如:

public void ExecuteWithoutReturn2(string procedureName, DynamicParameters param = null)
        {
            var param1 = new DynamicParameters();
            var param2 = new DynamicParameters();
            param1.Add("@YYYYMMDD1", YYYYMMDD);
            param2.Add("@YYYYMMDD2", YYYYMMDD);
            using (SqlConnection con = new SqlConnection(connectionString2))
            { //執行stored procedure
                con.Open();
                con.Execute(procedureName, param1,param2, commandType: CommandType.StoredProcedure);
            }
        }

若有錯誤或需要改正的再麻煩小魚大指教(汗

小魚 iT邦大師 1 級 ‧ 2022-04-16 07:50:56 檢舉

如果只是要年月,
SQL也可以抓年月.
類似YEAR, MONTH之類的方法.
(不過MS-SQL似乎比較複雜一點)

我要發表回答

立即登入回答