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

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 = ;
int pageSize = ;
SqlParameter[] Param =
{ new SqlParameter("@lastID", System.Data.SqlDbType.Int),
new SqlParameter("@pageSize", System.Data.SqlDbType.Int) }; if (lastID< )
{
Param[].Value = DBNull.Value;
}
else
{
Param[].Value = lastID;
} if (pageSize< )
{
Param[].Value = DBNull.Value;
}
else
{
Param[].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=;
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 = ;
public const int ERROR = -; }
public class AsResult
{
private const int STATUS_CODE = 1;
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

.NET MVC+ EF+调用存储过程 多表联查以及VIEW列表显示的更多相关文章

  1. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

  2. ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK

    看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...

  3. 转:EF调用存储过程、函数

    EF调用存储过程.函数 2014-04-02 09:12:20|  分类: ORM框架|举报|字号 订阅          一.ef4.1 codeFirst 修改表结构 增加字段等 EF code ...

  4. ASP.NET MVC + EF 利用存储过程读取大数据

    ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK 看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, ...

  5. 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法

    一. 背景 上一个章节,介绍了EF调用两类SQL语句,主要是借助 ExecuteSqlCommand  和 SqlQuery 两个方法来完成,在本章节主要是复习几类存储过程的写法和对应的EF调用这几类 ...

  6. MVC 5 调用存储过程参数配置方法-Procedure or function 'UP_***' expects parameter '@****', which was not supplied.

    MVC 5 调用存储过程参数配置方法-Procedure or function 'UP_***' expects parameter '@****', which was not supplied. ...

  7. .NET MVC+ EF+通用存储过程实现增删改功能以及使用事物处理

    引摘: 1.EF对事务进行了封装:无论何时执行任何涉及Create,Update或Delete的查询,都会默认创建事务.当DbContext类上的SaveChanges()方法被调用时,事务就会提交, ...

  8. EF调用存储过程、函数

    一.ef4.1 codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题 说这个问题前 首先先说下 我使用ef4.1 codefirst的目的. 是因为可 ...

  9. 关于MVC 中EF调用存储过程

    Entity Framework 4.3 中使用存储过程 分类:ASP.NET MVC 3, ASP.NET                  0                   尽管 Entit ...

随机推荐

  1. Libevent例子(二)

    服务端 #include<netinet/in.h> #include<stdio.h> #include<string.h> #include<event. ...

  2. rename系统调用的实现浅析

    rename系统调用用于在同一个文件系统中做文件的rename操作.如果源和目的在不同mount点上,rename会返回错误EXDEV. rename系统调用的实现入口在./fs/namei.c中: ...

  3. JSP弹出对话框方式小结

    转自:http://blog.csdn.net/ithomer/article/details/8033002 该博主(创业)另一博客地址: http://blog.mimvp.com JSP 网页在 ...

  4. iOS 10 的一个重要更新-自定义的通知界面

    续上篇,在简单闹钟的例子上,在通知界面上显示图片动画,并用通知关联的按钮更新通知界面.介绍 iOS 10 通知 API 的扩展:自定义通知显示界面. 新框架可以统一处理本地通知和远程推送,同时增加了一 ...

  5. 【LeetCode】224. Basic Calculator

    Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression ...

  6. Apache启用GZIP压缩网页传输

    首先我们先了解Apache Gzip的相关资料. 一.gzip介绍 Gzip是一种流行的文件压缩算法,现在的应用十分广泛,尤其是在Linux平台.当应用Gzip压缩到一个纯文本文件时,效果是非常明显的 ...

  7. 富文本编辑器 CKeditor 配置使用

    作者:Tyler Ning出处:http://www.cnblogs.com/tylerdonet/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...

  8. 【MongoDB】MongoDB的java驱动包使用

    要在Java中使用Mongo数据库 首先导入驱动包mongo-java-driver.jar. 然后获得库,获得集合.就可以对数据库操作了,比如: //创建MongoClient对象 MongoCli ...

  9. 使用Nexus搭建Maven服务器详细配置【转】

    为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到 ...

  10. List元素排序简例

    前言:这种处理方式,在程序中偶尔会用的到,栗子很简单,关键是加强一下记忆,以及以备后用 1:实现Comparable接口的方式 1-1:没有使用泛型,重写compareTo()方法时需要判断类型及转换 ...