net entity framework 7存储过程 能直接返回 datatable吗

Oracle存储过程创建临时表,插入数据后,怎么返回临时表数据,并在asp.net中接收到datatable中_百度知道&&&&&&&&&&&
本文主要介绍在ADO.NET Entity Framework中使用存储过程来进行查询、插入、更新、删除操作。
使用一下SQL建立实例数据库,下面选择了Northwind库来执行
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[Group](
[GroupID] [int] IDENTITY(1,1) NOT NULL,
[GroupName] [nvarchar](20) NOT NULL,
CONSTRAINT [PK_Group] PRIMARY KEY CLUSTERED
[GroupID] ASC
)WITH (PAD_INDEX
= OFF, STATISTICS_NORECOMPUTE
= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS
= ON, ALLOW_PAGE_LOCKS
= ON) ON [PRIMARY]
) ON [PRIMARY]
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[User](
[UserID] [int] IDENTITY(1,1) NOT NULL,
[UserName] [nvarchar](20) NOT NULL,
[UserGroupID] [int] NOT NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
[UserID] ASC
)WITH (PAD_INDEX
= OFF, STATISTICS_NORECOMPUTE
= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS
= ON, ALLOW_PAGE_LOCKS
= ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[User]
WITH CHECK ADD
CONSTRAINT [FK_User_Group] FOREIGN KEY([UserGroupID])
REFERENCES [dbo].[Group] ([GroupID])
ALTER TABLE [dbo].[User] CHECK CONSTRAINT [FK_User_Group]
create procedure CreateUser
@username nvarchar(20),
@groupid int
insert into [User] ([UserName] ,[UserGroupID] ) values(@username,@groupid)
create procedure DeleteUser
@userid int,
@groupid int
delete from [User] where UserID=@userid
create procedure UpdateUser
@userid int,
@username nvarchar(20),
@groupid int
update [User] set [UserName] =@username ,[UserGroupID] =@groupid where [UserID] =@userid
create procedure GetUserInfo
@userid int
select [UserID],[UserName],[UserGroupID] from [User] where [UserID] =@userid
insert into [Group] ([GroupName] ) values('管理员')
insert into [Group] ([GroupName] ) values('注册用户')
insert into [Group] ([GroupName] ) values('游客')
执行成功建立了User和Group两个表以及4个存储过程,CRUD User表的4个存储过程
由于之前我已经建立了EDMX模型,现在我要更新一下,右键模型板
右键 功能很强大,其中有打开Model Browser 窗口,从数据库更新模型,和从模型生成数据库(反映射),选择Update Model from Database 项目选择添加选项卡,选中全部复选框,像生成时候一样即可
查询存储过程的使用
点选下图中的红框处,右键点击函数导入,选择创建函数导入,输入方法名和返回类型。
添加函数后就可以通过方法来调用存储过程了。
NorthwindEntities ne = new NorthwindEntities();
var user = ne.GetUserInfo(1);
foreach (User u in user)
string userName = u.UserN
对应的存储过程是
ALTER procedure [dbo].[GetUserInfo]
@userid int
select [UserID],[UserName],[UserGroupID] from [User] where [UserID] =@userid
添加、修改、删除存储过程的ADOEF 使用
添加、修改、删除的方法也可以直接绑定到实体对象上,通过模型浏览器。
要特别注意,还要添加对应的属性
插入/更新/删除操作只需要像平时一样使用AddToUser/更新实体类并SaveChanges/DeleteObject这些方法就可以了。
参考文章:
阅读(...) 评论()Entity Framework 5.0 调用存储过程 返回值为什么是int类型
[问题点数:100分,结帖人class584520]
Entity Framework 5.0 调用存储过程 返回值为什么是int类型
[问题点数:100分,结帖人class584520]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年6月 .NET技术大版内专家分月排行榜第二2014年1月 .NET技术大版内专家分月排行榜第二
2014年2月 .NET技术大版内专家分月排行榜第三2013年4月 .NET技术大版内专家分月排行榜第三
2014年6月 .NET技术大版内专家分月排行榜第二2014年1月 .NET技术大版内专家分月排行榜第二
2014年2月 .NET技术大版内专家分月排行榜第三2013年4月 .NET技术大版内专家分月排行榜第三
2014年6月 .NET技术大版内专家分月排行榜第二2014年1月 .NET技术大版内专家分月排行榜第二
2014年2月 .NET技术大版内专家分月排行榜第三2013年4月 .NET技术大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。asp.net(14)
转载:/wlflovenet/archive//EF11.html
datatable 在有的时候是非常有用的 例如 做报表等& 因为我们不可能为每个报表建一个 实体类 这样比较麻烦
这个时候返回datatable& 则比较有用
(这也是Entity Framework跨库的一种解决方案,虽然无法直接获取实体对象。不过对于webapi来说,直接返回datatable给访问者,会自动转换为json。所以如果你使用webapi时,遇见Entity
Framework跨库,也可以采用这种方式)
写一个扩展方法
/// &summary&
/// EF SQL 语句返回 dataTable
/// &/summary&
/// &param name=&db&&&/param&
/// &param name=&sql&&&/param&
/// &param name=&parameters&&&/param&
/// &returns&&/returns&
public static DataTable SqlQueryForDataTatable(this Database db,
string sql,
SqlParameter[] parameters)
SqlConnection conn = new System.Data.SqlClient.SqlConnection();
conn.ConnectionString = db.Connection.ConnectionS
if (conn.State != ConnectionState.Open)
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection =
mandText =
if (parameters.Length&0)
foreach (var item in parameters)
cmd.Parameters.Add(item);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable table = new DataTable();
adapter.Fill(table);
protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)
GridView1.DataSource = GetDataTable();
GridView1.DataBind();
public DataTable GetDataTable()
GardenHotelContext context = new GardenHotelContext();
int LanType = 0;
int state = 0;
SqlParameter[] sqlparams=new SqlParameter[2];
sqlparams[0]=new SqlParameter(&LanType&,LanType);
sqlparams[1]=new SqlParameter(&state&,state);
DataTable DataTable = context.Database.SqlQueryForDataTatable(&select LeaveName,LeaveEmail from LeaveInfo where LanType=@LanType and State=@State&, sqlparams);
return DataT
这里顺便提一下:由于扩展方法,每次需要using命名空间,然而方法却无法自动提示。所以目前我是创建在页面同级节点下的。当然这是一个不好的习惯,目前没有找到好的解决方法。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5573次
排名:千里之外
原创:29篇
转载:14篇
(4)(4)(4)(1)(5)(5)(1)(8)(2)(6)(1)(2)Entity Framework执行Sql语句返回DataTable - 左眼微笑右眼泪 - 推酷
Entity Framework执行Sql语句返回DataTable - 左眼微笑右眼泪
Entity Framework中对外开放了数据库连接字符串,使用的时候可以直接得到这个连接字符串,然后进行相关的操作。如果在使用的过程中,发现Entity Framework中有一些满足不了的需求的话,那么就可以用这个连接字符串,自己写ADO的代码,去数据库进行相关的操作。特别是对于一些复杂的查询,这时候,一般是想直接执行一个Sql语句,返回一个结果集。下面是一个方法,直接返回DataTable。
/// &summary&
/// EF SQL 语句返回 dataTable
/// &/summary&
/// &param name="db"&&/param&
/// &param name="sql"&&/param&
/// &param name="parameters"&&/param&
/// &returns&&/returns&
public static DataTable SqlQueryForDataTatable(this Database db,
string sql)
SqlConnection conn = new System.Data.SqlClient.SqlConnection();
//conn.ConnectionString = db.Connection.ConnectionS
//if (conn.State != ConnectionState.Open)
conn.Open();
conn = (SqlConnection)db.C
SqlCommand cmd = new SqlCommand();
cmd.Connection =
mandText =
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable table = new DataTable();
adapter.Fill(table);
conn.Close();//连接需要关闭
conn.Dispose();
然后调用的时候,直接传入Context的Database进去,就可以了。
参考网站:
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 entity framework 7 的文章

 

随机推荐