//查 獲取信息
string userId =888886868886; //多個參數多表組合值 SqlParameter[] Param = { new SqlParameter("@UserId", System.Data.SqlDbType.VarChar) }; if (string.IsNullOrEmpty(userId)) { Param[0].Value = DBNull.Value; } else { Param[0].Value = userId; } var userdata = await _context.ExecSpAsync("SP_GetList", Param);
/// <summary> /// 異步執行帶有參數的存儲過程方法 獲取信息集合以及返回空值處理 /// </summary> /// <param name="db"></param> /// <param name="sql"></param> /// <param name="sqlParams"></param> /// <returns></returns> public async static Task<ArrayList> ExecSpAsync(this DefaultDbContext db, string sql, SqlParameter[] sqlParams) { var connection = db.Database.GetDbConnection(); using (var cmd = connection.CreateCommand()) { await db.Database.OpenConnectionAsync(); cmd.CommandText = sql; cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.AddRange(sqlParams); var dr = await cmd.ExecuteReaderAsync(); var columnSchema = dr.GetColumnSchema(); var data = new ArrayList(); while (await dr.ReadAsync()) { var item = new Dictionary<string, object>(); foreach (var kv in columnSchema) { if (kv.ColumnOrdinal.HasValue) { var itemVal = dr.GetValue(kv.ColumnOrdinal.Value); item.Add(kv.ColumnName, itemVal.GetType() != typeof(DBNull) ? itemVal:""); } } data.Add(item); } dr.Dispose(); return data; } } /// <summary> /// 異步執行帶有參數的存儲過程方法 增刪改操作以及返回帶有輸出的參數 /// </summary> /// <param name="db"></param> /// <param name="sql"></param> /// <param name="sqlParams"></param> /// <returns></returns> public async static Task<int> ExecuteNonQueryAsync(this DefaultDbContext db, string sql, SqlParameter[] sqlParams) { int numint; var connection = db.Database.GetDbConnection(); using (var cmd = connection.CreateCommand()) { await db.Database.OpenConnectionAsync(); cmd.CommandText = sql; cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.AddRange(sqlParams); numint = await cmd.ExecuteNonQueryAsync(); } return numint; }
//增刪改
SqlParameter[] Param = { new SqlParameter("@MobilePhone", System.Data.SqlDbType.VarChar), new SqlParameter("@PayPrice", System.Data.SqlDbType.VarChar), new SqlParameter("@rt_code", System.Data.SqlDbType.NVarChar, 20), new SqlParameter("@rt_msg", System.Data.SqlDbType.NVarChar, 200), //輸出一定要定義字符類型長度 以免報錯 }; if (string.IsNullOrEmpty(strMobilePhone)) { Param[0].Value = DBNull.Value; } else { Param[0].Value = strMobilePhone; } Param[1].Value = strPayPrice; if (string.IsNullOrEmpty(strParkUserId)) { Param[2].Value = DBNull.Value; } else { Param[2].Value = strParkUserId; } Param[2].Direction = ParameterDirection.Output; Param[3].Direction = ParameterDirection.Output; int numdata = await _dbcontext.ExecuteNonQueryAsync("SP_Pay", Param); string rtcode = Param[2].Value.ToString(); string rtmessage = Param[3].Value.ToString(); if (numdata < 0) { return AsResult.Error(Convert.ToInt32(rtcode), rtmessage); }
存儲過程代碼:
ALTER PROCEDURE [dbo].[SP_GetList] ( @UserId varchar(100) ) AS BEGIN begin transaction begin try BEGIN SELECT DISTINCT * FROM UserInfo_test usertest where usertest.UserID =@UserID ORDER BY usertest.UserID DESC; END commit transaction end try ---------------------------------------------------------------------------------------------------------------------------- begin catch print '執行存儲異常' rollback transaction end catch END
CREATE PROCEDURE [dbo].[SP_Pay] ( @MobilePhone varchar(50), @PayPrice varchar(100) , @ParkUserId varchar(50), @rt_code varchar(20) output, @rt_msg nvarchar(200) output ) AS --declare @rt_code varchar(50); --聲明變量 declare @before_overprice DECIMAL(9,2); declare @P_overprice DECIMAL(9,2);--變化后余額 declare @YuanPayPwd nvarchar(100); BEGIN ; select @before_overprice=isnull(OveragePrice,0) FROM Meb_Overage WHERE ParkUserId=@ParkUserId; IF (@PayPrice is null) BEGIN set @rt_code= '1001'; set @rt_msg= '支付金額不能為空!'; RETURN; END; IF (@before_overprice=0) BEGIN set @rt_code= '1001'; set @rt_msg= '賬戶余額不足!'; RETURN; END; IF (@PayPrice>@before_overprice) BEGIN set @rt_code= '1001'; set @rt_msg= '當前賬戶余額不足!'; RETURN; END; begin transaction begin try if(@ParkUserId is not null) BEGIN update Meb_Overage set OveragePrice=(OveragePrice-@PayPrice) WHERE ParkUserId = @ParkUserId ; ---支付后金額 select @P_overprice=isnull(OveragePrice,0) FROM Meb_Overage WHERE ParkUserId=@ParkUserId; INSERT INTO Meb_Details(ParkUserId, PayPrice, AddTime , BalanceStatus ) VALUES ( @ParkUserId, @PayPrice, --繳費支付金額 SYSDATETIME(),-- CONVERT(varchar(100), GETDATE(), 120) '0'--默認 ); END; commit transaction set @rt_code= '0000'; set @rt_msg= '交易成功!'; return end try begin catch set @rt_code= '9999'; set @rt_msg= '交易失敗!'; rollback transaction end catch END