.net core 3.1 + 动态执行C#
1.使用
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;
2.定义 RoslynHelper 类, 添加一个 DataTable GetTableBySql(string sql = "") 方法
3. 先定义 待执行的 C# 脚本方法
比如执行一个sql语句, 得到查询的结果集 DataTable
==>去动态执行 Common.RoslynHelper().GetTableBySql(sql) 方法
string = @"
using System;
using YXTASK.Common;
public class ScriptedClass
{
public System.Data.DataTable DataRes { get; set; }
public ScriptedClass()
{
string sql= "" select * from (select id,age.name from StudentInfo) where age<=20"";
this.DataRes = new Common.RoslynHelper().GetTableBySql(sql);
}
}
";
4.调用
1>传入需要注入的命名空间
var scriptOptions = ScriptOptions.Default.AddReferences(typeof(System.Data.DataTable).Assembly, typeof(RoslynHelper).Assembly);
2>传入待执行的C# 文本
var script1 = CSharpScript.RunAsync(code1, scriptOptions).Result;
3>执行脚本
var result1 = script1.ContinueWithAsync<System.Data.DataTable>("new ScriptedClass().DataRes").Result;
4>得到返回值
DataTable res = result1.ReturnValue;
try
{
var scriptOptions = ScriptOptions.Default.AddReferences(typeof(System.Data.DataTable).Assembly, typeof(RoslynHelper).Assembly);
var script1 = CSharpScript.RunAsync(code1, scriptOptions).Result;
var result1 = script1.ContinueWithAsync<System.Data.DataTable>("new ScriptedClass().DataRes").Result;
res = result1.ReturnValue;
Console.WriteLine(res.Rows.Count);
Console.WriteLine("");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
Console.WriteLine("");
}
.net core 3.1 + 动态执行C#的更多相关文章
- Cookies 初识 Dotnetspider EF 6.x、EF Core实现dynamic动态查询和EF Core注入多个上下文实例池你知道有什么问题? EntityFramework Core 运行dotnet ef命令迁移背后本质是什么?(EF Core迁移原理)
Cookies 1.创建HttpCookies Cookie=new HttpCookies("CookieName");2.添加内容Cookie.Values.Add(&qu ...
- Javascript动态执行JS(new Function与eval比较)
new Function与eval可以动态执行JS,只要把拼接好的JS方法,然后以字符串的形式传入到这两个函数,可以执行,其中new Function用在模板引擎比较多. 用 Function 类直接 ...
- c# 动态执行脚本,相关的几个脚本引擎.
Jint 嵌入式的javascript脚本支持引擎,一直都在更新,对各种方法支持也比较好,可以 C# 交互. https://github.com/sebastienros/jint Jurass ...
- Oracle动态执行语句
一.为什么要使用动态执行语句? 由于在PL/SQL 块或者存储过程中只支持DML语句及控制流语句,并不支持DDL语句,所以Oracle动态执行语句便应允而生了.关于DDL与DML的区别,请参见:D ...
- Oracle错误:动态执行表不可访问,本会话自动统计被禁止,关闭自动统计之后的问题
使用PL/SQL时, 每次第一次打开表的时候会提示"动态执行表不可访问,本会话的自动统计被禁止"的错误,一消息如下: V$SESSION,V$SESSTAT,V$STATNAME没 ...
- PHP 动态执行
PHP 动态执行 在页面上直接输入代码,点击执行,返回执行结果 方法很简单,主要使用了 $newfunc = create_function('', $code); 函数来实现. 代码如下: < ...
- C# 动态执行批处理命令
本文转载:http://www.cnblogs.com/lenic/p/4097045.html C# 动态执行一系列控制台命令,并允许实时显示出来执行结果时,可以使用下面的函数.可以达到的效果为: ...
- PLSQL Developer报“动态执行表不可访问,本会话的自动统计被禁止”的解决方案
现象与提示: 第一次用PLSQL Developer连接数据库,若用sys用户登录并操作则正常,若用普通用户比如haishu登录并创建一个表则报错"动态执行表不可访问,本会话的自动统计被禁止 ...
- Oracl 动态执行表不可访问,本会话的自动统计被禁止
oracle ---建立SQL窗体 写入 select * from tableA; 弹出错误窗口 : 动态执行表不可访问,本会话的自动统计被禁止.在执行菜单里你可以禁止统计,或在v$session, ...
- SQL函数中的动态执行语句
一.为什么要使用动态执行语句? 由于在PL/SQL 块或者存储过程中只支持DML语句及控制流语句,并不支持DDL语句,所以Oracle动态执行语句便应允而生了.关于DDL与DML的区别,请参见:DDL ...
随机推荐
- Mysql5.7 Linux编译安装教程
1.系统约定 安装文件下载目录:/data/software Mysql目录安装位置:/usr/local/mysql 数据库保存位置:/usr/local/mysql/data 日志保存位置:/tm ...
- ibus 输入法导致输入卡顿的解决方案
系统: Zorin OS 16 Pro 基于 Ubuntu 20.04 LTS 关键词:Linux 间歇性卡顿.输入法导致卡顿.无法输入 本问题发生的情形是系统间歇性的无法接受键盘输入,无意间发现切换 ...
- C++:面向对象
文章目录 继承与多态 继承 继承的构造与析构 虚继承 多态 ❀虚/纯虚函数❀ 虚析构/纯虚析构 对象的生命周期 实例化对象 构造函数与析构函数 拷贝构造函数 防止拷贝 总结 深拷贝与浅拷贝 初始化列表 ...
- C语言:输入一串字符串,统计字符串中有多少个数字
gets函数会在输入完字符后自动补上一个\0,所以用这个特性可以计算出字符串是否结束. 因为数字在字符中对应的ascii码就是0~9,只要遇到小于9的字符就是数字,所以计数器加一 #include&l ...
- 5GC 系统架构
目录 文章目录 目录 前文列表 4G/5G 核心网对比 4G/5G 核心网融合架构 5GC 架构 AMF 功能 SMF 功能 NSSF 功能 UPF 功能 AF.PCF & NEF 功能 BS ...
- go高并发之路——缓存击穿
缓存击穿,Redis中的某个热点key不存在或者过期,但是此时有大量的用户访问该key.比如xxx直播间优惠券抢购.xxx商品活动,这时候大量用户会在某个时间点一同访问该热点事件.但是可能由于某种原因 ...
- linux curl命令的重要用法:发送GET/POST请求,获取网页内容
curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合 传输工具,但按传统,习惯称url为下载工具. #使用curl发送GET ...
- 从源码的角度弄懂MyBatis动态代理开发原理
MyBatis提供了一种动态代理实现SQL调用的功能,使用者只需要在映射文件中配置SQL语句与映射规则即可完成SQL调用和结果集封装.下面代码展示了动态代理调用的基本步骤: public void t ...
- C#中接口的显式实现与隐式实现及其相关应用案例
C#中接口的显式实现与隐式实现 最近在学习演化一款游戏项目框架时候,框架作者巧妙使用接口中方法的显式实现来变相对接口中方法进行"密封",增加实现接口的类访问方法的"成本& ...
- 常用的注意力机制模块(SE、CBAM)
[深度学习]总目录 SE论文:<Squeeze-and-Excitation Networks>将重点放在了通道(channel)关系上,并提出了一种新的结构单元SE block.将SE ...