在项目中由于需求,需要返回复杂的数据,需要执行存储过程,但是在DONETCORE2.0中,看官网文档执行的sql的有点操蛋,满足不了需求,就想到了ADO.NET

于是找资料,也没有合适的,就动手自己封装了一个。代码如下;

 public static class ExtendDbRepository
{
public static DataSet SqlQuery(this Db db, string spName, params SqlParameter[] paramsters)
{
SqlConnection connection = db.Database.GetDbConnection() as SqlConnection;
SqlDataAdapter adapter = null;
DataSet set = null;
using (SqlCommand command = new SqlCommand(spName, connection))
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = spName;
command.Parameters.AddRange(paramsters);
adapter = new SqlDataAdapter(command); set = new DataSet();
adapter.Fill(set);
adapter.SelectCommand.Parameters.Clear();
adapter.Dispose();
command.Parameters.Clear();
command.Dispose();
connection.Close();
connection.Dispose();
return set;
}
} public static IEnumerable<TElement> SqlQuery<TElement>(this Db db, string sql, params object[] parameters) where TElement : new()
{
var connection = db.Database.GetDbConnection();
using (var cmd = connection.CreateCommand())
{
db.Database.OpenConnection();
cmd.CommandText = sql;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddRange(parameters);
var dr = cmd.ExecuteReader();
var columnSchema = dr.GetColumnSchema();
var data = new List<TElement>();
while (dr.Read())
{
TElement item = new TElement();
Type type = item.GetType();
foreach (var kv in columnSchema)
{
var propertyInfo = type.GetProperty(kv.ColumnName);
if (kv.ColumnOrdinal.HasValue && propertyInfo != null)
{
//注意需要转换数据库中的DBNull类型
var value = dr.IsDBNull(kv.ColumnOrdinal.Value) ? null : dr.GetValue(kv.ColumnOrdinal.Value);
propertyInfo.SetValue(item, value);
}
}
data.Add(item);
}
dr.Dispose();
return data;
}
}
}

EFCore 中执行存储过程返回DataSet DataTable的更多相关文章

  1. 在asp.net中执行存储过程(转)

    摘自:http://www.cnblogs.com/smhy8187/articles/677742.html 声明:本例用的数据库是系统提供的pubs数据库,表是是employee,编程语言用C# ...

  2. Oracle中执行存储过程call和exec区别

    Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...

  3. 在SQL Server数据库中执行存储过程很快,在c#中调用很慢的问题

    记录工作中遇到的问题,分享出来: 原博客地址:https://blog.csdn.net/weixin_40782680/article/details/85038281 今天遇到一个比较郁闷的问题, ...

  4. EF中执行存储过程,获取output返回值

    EF不能直接支持执行存储过程,于是使用转化成执行SQL语句的形式,却怎么也获取不到output的值,折腾的好久,终于解决了,分享下曲折的经历: public int AddVote(int title ...

  5. C#中执行存储过程并在SQL server中调试

    1.编写存储过程 ) drop PROCEDURE [dbo].[sp_calcPci_of_baseRcd_GTmpTbl] CREATE PROCEDURE [dbo].[sp_calcPci_o ...

  6. Java中执行存储过程和函数(web基础学习笔记十四)

    一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...

  7. Java中执行存储过程和函数

    装载于:http://www.cnblogs.com/liunanjava/p/4261242.html 一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. Ca ...

  8. ThinkPhp3.1.3执行存储过程返回false

    1.Tp在调用存储过程的时候,每次都显示false 返回一大片,下面是我自己的代码.

  9. sqlserver2008链接服务器中执行存储过程配置过程

    参考:http://www.cnblogs.com/ycsfwhh/archive/2010/12/15/1906507.html 1.双方启动MSDTC服务MSDTC(分布式交易协调器),协调跨多个 ...

随机推荐

  1. 如何解决Windows 10屏幕字体缩放模糊问题

    https://www.ithome.com/html/win10/374911.htm 笔者前段时间买了一台小米笔记本Pro,除了有字体模糊的问题外,还是比较满意的.这台笔记本是15.6英寸,108 ...

  2. iobit-unlocker --- 类似 Unlocker 工具,强制删除文件或文件夹

    win10 使用 Unlocker 1.9.2 常有问题,以前在win7上使用完全ok的 更换成:iobit-unlocker ,win10体验还可以,类似Unlocker 下载地址: https:/ ...

  3. flutter 打包apk之后,安装在手机上无法访问网络解决方法

    </application> <uses-permission android:name="android.permission.READ_PHONE_STATE" ...

  4. 移动端Web框架

    [参考]移动端 UI设计尺寸(一)篇 [参考]移动端界面设计之尺寸篇 [参考]介绍几个移动web app开发框架 [参考]移动webapp前端ui用哪个框架好 H5 做移动开发也分两种,一种就是正常的 ...

  5. JKS转PFX

    通过jks2pfx工具 请下载:JKS2PFX转换工具. 将压缩包解开到 c:\jks2pfx 目录下, 运行以下命令:JKS2PFX <导出文件名> [Java Runtime的目录]备 ...

  6. 快速安装Python3+RobotFrameowork自动化测试环境

    1. 安装Python3(笔者这里安装的Python3.6.5) 安装 robotframework :   pip install robotframework -U pip install rob ...

  7. django缓存相关

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_39726347/articl ...

  8. mybatis一级二级缓存

    一级缓存分析 不需要任何配置 ,mybatis本身带有 一级缓存是SqlSession范围的缓存,当调用SqlSession的修改,添加,删除,commit(),close()等方法时,就会清空一级缓 ...

  9. MySQL8 全部数据类型

    数字类型 日期类型 字符串类型 CHAR和VARCHAR 表列数和行大小限制 MySQL每个表的硬限制为4096列,但对于给定的表,有效最大值可能更小.确切的列限制取决于几个因素: 表的最大行大小限制 ...

  10. jmeter Dashboard Report

    说明:详情参考:https://jmeter.apache.org/usermanual/generating-dashboard.html JMeter3.0以后引入了Dashboard Repor ...