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

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. android webview goback 跳过页面302自动跳转方法

    转自http://blog.csdn.net/dyllove98/article/details/8827529 http://hi.baidu.com/519177819/item/3a340f16 ...

  2. CentOS SVN客户端应用

    一.CentOS安装TortoiseSVN yum install -y subversion   二.SVN客户端命令   1.将文件checkout到本地目录 svn checkout path( ...

  3. web安全之渗透测试

    本次渗透测试使用工具列表如下: 漏洞扫描器 (主机/Web) 绿盟RAS漏洞扫描器 商用 端口扫描器 NMAP 开源 网络抓包 Fiddler 开源 暴力破解工具 Hydra 开源 数据库注入工具 S ...

  4. 【LeetCode】201. Bitwise AND of Numbers Range

    Bitwise AND of Numbers Range  Given a range [m, n] where 0 <= m <= n <= 2147483647, return ...

  5. java小程序,用java在指定目录或以及子目录中找出同名文件,java File过滤文件名后找同名文件

    主要是使用java API“java.io.File”实现 一个简单的类,copy出来,因main方法可直接运行. package com.paic.icore.pams.auto.util; imp ...

  6. 【MySQL】MySQL之MySQL5.7安装包(msi文件)在Windows8下安装

    最近自己在使用MySQL5.7.16.msi安装MySQL.自己下载的是.msi文件,在安装的过程中遇到了许多文件,网上大部分的Blog都是关于免安装包的安装方法,希望我的方法对大家有帮助. 1,下载 ...

  7. sql中union 和 union all的区别

    最近发现一个视图出奇的慢,在生产环境还好,由于服务器配置较高,没有察觉出来.但是做了一次修改后在开发版 和测试版就直接查询不出结果了.就连select count(1) from 都运行2个小时没有结 ...

  8. SteveY对Amazon和Google平台的吐槽

    Steve Yegge, Amazon的前员工,现任Google员工,其本来想在Google+上和Google的员工讨论一些关于平台的东西,结果不小心把圈子设成了Public,结果这篇文章就公开给了全 ...

  9. redis cluster 集群重新启动关闭

    找遍了redis cluster官方文档,没发现有关集群重新启动和关闭的方法.为啥会没有呢,推測redis cluster至少要三个节点才干执行,三台同一时候挂掉的可能性比較小,仅仅要不同一时候挂掉. ...

  10. js获取日期:昨天今天和明天、后天

    <html> <head> <meta http-equiv="Content-Type" content="textml; charset ...