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

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. 洛谷 P2335 [SDOI2005]位图

    OJ检测链接:https://www.luogu.org/problem/show?pid=2335 题目描述 现在我们给出一个n*m的单色位图,且该图中至少含有一个白色的像素.我们用(i, j)来代 ...

  2. Linux 系统 fstab错误导致系统无法启动的修复

    fstab错误的修复 vim /etc/fstab/dev/sda6 /mnt xfs defaults 0 0重启后系统无法启动,等待一段时间后输入root的密码可进入单用户模式,修改fstab后可 ...

  3. 常用bios flash闪存型号

    常用flash IC芯片厂商及型号 制造商 4M 8M 16M 32M Atmel AT25DF321AT25DF321A AT25DF641     EON (cFeon) EN25F32EN25P ...

  4. 类型“System.Data.SQLite.SQLiteParameter”在未被引用的程序集中定义。必须添加对程序集“System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139”的引用

    出现这个问题是 你的系统是64位 同时 dll生成的 any cpu 应该换为 x86

  5. Javascript 计算字符串所占字节数

    最近项目有个需求要用js计算一串字符串写入到localStorage里所占的内存,众所周知的,js是使用Unicode编码的.而Unicode的实现有N种,其中用的最多的就是UTF-8和UTF-16. ...

  6. Storage System and File System Courses

    I researched a lot about storage system classes given at good universities this year. This had two r ...

  7. selenium的运行时异常

    selenium这个库是一个伟大的库,它赋予了程序员控制浏览器的能力.但是如果不理解这个库的设计上的一些哲学,就会遇到很多问题. selenium支持多种浏览器,但是这些浏览器里面,只有firefox ...

  8. binary search tree study

    今天又写了delete的部分,时间就这么被一天天地浪费了,我感到十分惋惜呀 #pragma once #include "stdio.h" struct Node { Node(i ...

  9. 使用import简化spring的配置 spring import 标签的解析 使用import或加载spring配置时,报错误There is no ID/IDREF 多个Spring配置文件import resource路径配置

    spring-import 标签的解析.使用案例: 对于spring配置文件的编写,我想,对于经历过庞大项目的人,都有那种恐惧的心理,太多的配置文件.不过,分模块都是大多数人能想到的方法,但是,怎么分 ...

  10. 新浪安装weiphp2.0的方法

    请安装此网页的方法来安装: https://coding.net/u/idoubi666/p/weiphp-sae/git