sql-server - SQL Server Reporting Services - 报表表达式执行
问题描述
假设我有以下表达式:
=DateAdd(DateInterval.Year,-1,Today())
是否有允许我传入表达式并返回执行表达式的结果的 SQL Server Web 服务端点?我查看了此处列出的端点,但找不到。
还是有另一种方法来评估这个表达式?
解决方案
我找到了另一种使用 VB.net 评估表达式的方法(假设@Wolfgang Kais 关于使用 VB.net 而不是 VBA 是正确的)
这是代码片段:
using System;
using System.CodeDom.Compiler;
using System.Text;
using Microsoft.VisualBasic;
namespace VbStringCompiler
{
internal class Program
{
public static void Main(string[] args)
{
new Program();
}
private const string CRLF = "\r\n";
private Program()
{
var vbCodeProvider = new VBCodeProvider();
var compilerParameters = new CompilerParameters();
compilerParameters.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
compilerParameters.ReferencedAssemblies.Add("System.dll");
compilerParameters.CompilerOptions = "/t:library";
compilerParameters.GenerateInMemory = true;
var stringBuilder = new StringBuilder();
stringBuilder.Append("Imports Microsoft.VisualBasic" + CRLF);
stringBuilder.Append("Imports System" + CRLF + CRLF);
stringBuilder.Append("Namespace Evaluate" + CRLF);
stringBuilder.Append("Class RunTime" + CRLF);
stringBuilder.Append("Public Function Run() As Object" + CRLF);
// insert code to return
stringBuilder.Append("Return DateAdd(DateInterval.Year, -1, Today())" + CRLF);
stringBuilder.Append("End Function" + CRLF);
stringBuilder.Append("End Class" + CRLF);
stringBuilder.Append("End Namespace" + CRLF);
try
{
var compilerResults =
vbCodeProvider.CompileAssemblyFromSource(compilerParameters, stringBuilder.ToString());
if (compilerResults.Errors.Count > 0)
{
foreach (CompilerError compilerError in compilerResults.Errors)
{
Console.Error.WriteLine(compilerError.ToString());
}
return;
}
var instance = compilerResults.CompiledAssembly.CreateInstance("Evaluate.RunTime");
var methodInfo = instance.GetType().GetMethod("Run");
var methodReturn = methodInfo.Invoke(instance, null);
Console.WriteLine(methodReturn);
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
}
}
}
}
推荐阅读
- r - 在多核上使用 Igraph
- azure - O365 基于组的许可不起作用
- svg - 如何从带有材质 ui 的 SVG 图像创建 SVG 图标?
- javascript - 如何使用javascript打开剑道角度日期选择器弹出窗口
- php - 使用自动生成的 DATETIME 和默认值 CURRENT_TIMESTAMP 插入新对象的 symfony 4 教义错误
- python - 解析电子邮件以识别关键字
- javascript - Django中可修改的项目符号列表
- python - 如何使用 Python 在浏览器中打开网站?
- c# - 使用 LINQ、GroupBy 更改输出样式
- extjs - Sencha ExtJs5 一个模型和一个视图中的多个模型