直接上干活,至于网上的一大堆处理方式不予评论,做好自己的就是最好的,供大家不走弯路
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; } } /// <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 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