Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server Reporting Services-报表表达式执行_Sql Server_Reporting Services - Fatal编程技术网

Sql server SQL Server Reporting Services-报表表达式执行

Sql server SQL Server Reporting Services-报表表达式执行,sql-server,reporting-services,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 S

假设我有以下表达式:

=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);
        }
    }
}
}

为什么不在正在编写的报表中运行表达式呢。它内置了一个表达式引擎。您想用表达式做什么?提供的报表查看器不足以满足我们的需要。因此,我的任务是编写一个报告查看器,重新使用RDL。我有来自Microsoft的RDL模式,但现在我一直在尝试计算看起来像VBA表达式的内容。我只是尝试在运行时计算表达式。因此,如果我传入上述表达式,我希望对其进行计算并返回2017年8月24日。“报表查看器”是一个控件,可以嵌入到Windows应用程序的表单或web应用程序的web表单(或SharePoint页面)中。这些控件显示由报表服务器呈现的报表。该服务器是计算此类表达式(VB.NET+SSRS特有的某些函数)的服务器。在我看来,您正在尝试重新发明报表服务器。如果是这样,那么祝你好运,但是如果没有需要理解RDL的Microsoft Reporting Services服务器,为什么不用代码可以轻松评估的东西替换所有SSRS表达式呢?不,我不是在尝试重新发明报表服务器;我正在尝试实现报表查看器的精简版本。当前报表查看器无法在Chrome或FireFox中工作,需要WebForms。我试图通过简单地读取参数来抽象这些需求;提供它们后,单击generate,并使用其中一个SOAP端点生成报告。还有,我想表达式中的VBA和VB.NET在哪里?