zoukankan      html  css  js  c++  java
  • .NET MVC+ EF+调用存储过程 多表联查以及VIEW列表显示

    直接上干活,至于网上的一大堆处理方式不予评论,做好自己的就是最好的,供大家不走弯路

    1、view页面

    <link href="~/Content/bootstrap.css" rel="stylesheet" />
    
    
        <div class="well">
            <table class="table">
                <tr>
                    <th>用户名</th>
                    <th>地址</th>
                    <th>订单编号</th>
                    <th>城市代号</th>
                    <th>时间</th>
                    <th>订单状态</th>
                </tr>
               
                @foreach (var item in ViewBag.dyObject)
                {
                    <tr>
                        <td>@item.UserName </td>
                        <td>@item.LocalAddress </td>
                        <td>@item.BargainOrderCode </td>
                        <td>@item.CityCode </td>
                        <td>@item.UpdateTime </td>
                        <td>@item.OrderStatus </td>
    
                    </tr>
    
                }
            </table>
    
        </div>

     2、Controller 控制器代码

     public async Task<ActionResult> UserOrder()
           {
             #region 使用存储过程实现多表联查VIEW显示
    
            int lastID = 0;
            int pageSize = 10;
            SqlParameter[] Param =
                {
    
                        new SqlParameter("@lastID", System.Data.SqlDbType.Int),
                        new SqlParameter("@pageSize", System.Data.SqlDbType.Int)
    
                };
    
               
                if (lastID< 0)
                {
                    Param[0].Value = DBNull.Value;
                }
                else
                {
                    Param[0].Value = lastID;
                }
    
                if (pageSize< 0)
                {
                    Param[1].Value = DBNull.Value;
                }
                else
                {
                    Param[1].Value = pageSize;
                }
    
                
                var data = await _DbContext.Exec_SpAsync("SP_GetUserOrderList", Param);
                //foreach (Dictionary<string, object> item in data)
                //{
    
                //    string UserName = item["UserName"].ToString();
                //    string LocalAddress = item["LocalAddress"].ToString();
                //    string BargainOrderCode = item["BargainOrderCode"].ToString();
                //    string CityCode = item["CityCode"].ToString();
                //    DateTime UpdateTime = Convert.ToDateTime(item["UpdateTime"]);
                //    int OrderStatus = Convert.ToInt32(item["OrderStatus"]);
                //}
                List<dynamic> userList = new List<dynamic>();
               
                foreach (Dictionary<string, object> item in data)
                {
                    //userList.Add(new
                    //{
                    //    UserName = item["UserName"].ToString(),
                    //    LocalAddress = item["LocalAddress"].ToString(),
                    //    BargainOrderCode = item["BargainOrderCode"].ToString(),
                    //    CityCode = item["CityCode"].ToString(),
                    //    UpdateTime =Convert.ToDateTime(item["UpdateTime"]),
                    //    OrderStatus =Convert.ToInt32(item["OrderStatus"])
    
                    //  });      
                    
                    dynamic dyObject = new ExpandoObject();
                    dyObject.UserName = item["UserName"].ToString();
                    dyObject.LocalAddress = item["LocalAddress"].ToString();
                    dyObject.BargainOrderCode = item["BargainOrderCode"].ToString();
                    dyObject.CityCode = item["CityCode"].ToString();
                    dyObject.UpdateTime = Convert.ToDateTime(item["UpdateTime"]);
                    dyObject.OrderStatus = Convert.ToInt32(item["OrderStatus"]);
                    userList.Add(dyObject);
                }
                ViewBag.dyObject = userList;
                return View();
                #endregion
              }

     3、EF中多表查询操作的存储过程通用调用方法

    /// <summary>
        /// 存储共用
        /// </summary>
        public static class StorageCommon
        {
            /// <summary>
            /// 带有参数的存储过程公共方法  获取信息集合  以及返回空值处理
            /// </summary>
            /// <param name="db"></param>
            /// <param name="sql"></param>
            /// <param name="sqlParams"></param>
            /// <returns></returns>
            public async static Task<ArrayList> Exec_SpAsync(this DefaultDbContext db, string sql, SqlParameter[] sqlParams)
            {
    
                using (var cmd = db.Database.Connection.CreateCommand())
                {
                    await db.Database.Connection.OpenAsync();
                    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;
                }
            }
    完善后代码:
     public async static Task<ArrayList> Exec_SpAsync(this DefaultDbContext db, string sql, SqlParameter[] sqlParams)
            {
                var data = new ArrayList();
               DbDataReader dr=null ;
                try
                {  
                    using (var cmd = db.Database.Connection.CreateCommand())
                    {
                        await db.Database.Connection.OpenAsync();
                        cmd.CommandText = sql;
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Parameters.AddRange(sqlParams);
                        //var dr = await cmd.ExecuteReaderAsync();
                         dr = await cmd.ExecuteReaderAsync();
                        var columnSchema = dr.GetColumnSchema();
                        
                        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);
                        }
                    }
                }
                catch (Exception ex)
                {
    
                    _Logger.Error("查询数据" + ex.Message);
                    //throw new Exception("查询失败." + ex.Message);
                }
                finally
                {
                    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;
    
    
                using (var cmd = db.Database.Connection.CreateCommand())
                {
                    await db.Database.Connection.OpenAsync();
                    cmd.CommandText = sql;
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.Parameters.AddRange(sqlParams);
                    
                    numint = await cmd.ExecuteNonQueryAsync();
                    cmd.Connection.Close();
                }
    
                return numint;
            }
    完善后代码:
    
    public async static Task<int> ExecuteNonQueryAsync999(this DefaultDbContext db, string sql, SqlParameter[] sqlParams)
            {
                int numint=0;
                using (var cmd = db.Database.Connection.CreateCommand())
                {
                    try
                    {
                        await db.Database.Connection.OpenAsync();
                        cmd.CommandText = sql;
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Parameters.AddRange(sqlParams);
    
                        numint = await cmd.ExecuteNonQueryAsync();
                        cmd.Connection.Close();
                        
                    }
                    catch (Exception ex)
                    {                   
                        _Logger.Error("执行数据" + ex.Message);
                        //throw new Exception("提交失败." + ex.Message);
                    }
                    finally
                    {
                        cmd.Connection.Dispose();
                    }
                    return numint;
                    
              }
            }
    
    
    
    public class RetCode
            {
                public const int SUCCESS = 0;
                public const int ERROR = -1;
               
            }
            public class AsResult
            {
                private const int STATUS_CODE = 100;
                private const string CONTENT_TYPE = "application/json;charset=utf-8";
                private readonly static Dictionary<int, string> message = new Dictionary<int, string>()
            {
                { RetCode.SUCCESS, "success" },
                { RetCode.ERROR, "" },
                
            };
    
                public static ContentResult Success(Object data = null)
                {
                    var content = new
                    {
                        RetCode = RetCode.SUCCESS,
                        Message = message[RetCode.SUCCESS],
                        Data = data ?? new { }
                    };
                    return new ContentResult
                    {
                        //StatusCode = STATUS_CODE,
                        ContentType = CONTENT_TYPE,
                        Content = JsonConvert.SerializeObject(content).ToString()
                    };
                }
    
                public static ContentResult Error(int code, string moreMsg = "")
                {
                    string msg = "";
                    if (message.ContainsKey(code))
                    {
                        msg = message[code];
                    }
                    msg = String.IsNullOrEmpty(msg) ? moreMsg : msg + ", " + moreMsg;
    
                    var content = new
                    {
                        RetCode = code,
                        Message = msg,
                        Data = new { }
                    };
                    return new ContentResult
                    {
                        //StatusCode = STATUS_CODE,
                        ContentType = CONTENT_TYPE,
                        Content = JsonConvert.SerializeObject(content).ToString()
                    };
                }
            }
        }
    

     4、存储过程

    CREATE PROCEDURE [dbo].[SP_GetUserOrderList] 
    ( 
       
       @lastID int=0,  --当前页数
       @pageSize int=10 --每页显示记录数
       
     )
        
    AS
       --declare  @rt_code int;  --声明变量
      
      BEGIN
       
       begin transaction
        begin try
        BEGIN
    
        
    
        SELECT  DISTINCT top (@pageSize)  -- CONVERT(varchar(100), order.UpdateTime, 20) AS UpdateTime
            * FROM    UserInfo_test usertest
            LEFT JOIN  TRA_BargainOrder_Test  ordertest 
             ON usertest.Id=ordertest.UserID 
             
           
          where (( @lastID > 0 AND usertest.Id < @lastID) OR @lastID=0 )  
        --  and CONVERT(varchar(100), MB.AddTime, 23)>CONVERT(varchar(100), @StartTime, 23) 
        --AND CONVERT(varchar(100), MB.AddTime, 23)<CONVERT(varchar(100), @EndTime, 23) 
        
          ORDER BY ordertest.UpdateTime DESC; 
    END
       commit transaction
      end try 
        ----------------------------------------------------------------------------------------------------------------------------
    
    begin catch
    
     print '执行存储异常'
    
     rollback transaction
      
     end catch
    
       
    END
    
    GO
  • 相关阅读:
    powerdesigner流程图库看不到了palette视图,palette视图没有了
    IE的getelementbyid(elementid)方法的使用(转)
    QTP的那些事通过html标签的属性获取对象(类似onclick的属性)
    oracle语句详解group by语句解答
    oracle中的decode的使用
    oracle中的trunc函数操作
    QTP的那些事—WMI+SQL分析查询工具
    VBS获取毫秒的时间方法整理
    VBS输出双引号””
    VBSEdit工具学习深入
  • 原文地址:https://www.cnblogs.com/Warmsunshine/p/9086863.html
Copyright © 2011-2022 走看看