Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
Linq to sql 使用Linq to SQL和SQL Reporting Services_Linq To Sql_Reporting Services - Fatal编程技术网

Linq to sql 使用Linq to SQL和SQL Reporting Services

Linq to sql 使用Linq to SQL和SQL Reporting Services,linq-to-sql,reporting-services,Linq To Sql,Reporting Services,我有一个关于集成使用Linq到Sql进行数据查询开发的业务对象以及与Sql Server Reporting Services集成的问题 我们有一组业务对象,用于查询使用Linq to SQL开发的两个后端数据库。生成的SQL是相对动态的(基于用户选择的条件),涉及多个连接,一些内部连接,一些外部连接,等等。Linq到SQL在这方面做得非常好。但是,在初次推出之后,我们尝试使用SQL Reporting Services实现报告时遇到了问题。我们没有能力将SSRS报告绑定到我们的业务层。我们最终

我有一个关于集成使用Linq到Sql进行数据查询开发的业务对象以及与Sql Server Reporting Services集成的问题

我们有一组业务对象,用于查询使用Linq to SQL开发的两个后端数据库。生成的SQL是相对动态的(基于用户选择的条件),涉及多个连接,一些内部连接,一些外部连接,等等。Linq到SQL在这方面做得非常好。但是,在初次推出之后,我们尝试使用SQL Reporting Services实现报告时遇到了问题。我们没有能力将SSRS报告绑定到我们的业务层。我们最终要做的是从SQL Profiler获取执行的SQL,创建存储过程,并在报告中使用存储过程。可以想象,这在我们维护代码时成了一个问题,需要更新业务层和存储过程

我做了一些研究,发现定制数据扩展似乎是实现这一点的一种方法。这就是问题的解决办法吗?有谁有更好的方法吗?有没有使用LINQ实现这样的解决方案的例子


谢谢

顺便说一句,您不需要使用探查器来查看生成的SQL

变量查询=( 来自数据库中的c 其中c.LastName=“某人” 选择c );

//输出查询SQL Debug.WriteLine(查询)

返回query.ToList()

或者,我们所做的是连接到DataContext的Log属性。这会在每次访问数据库时自动写出SQL和参数。我们发现这对于识别不必要的数据库调用非常有用

公共类数据库记录器:System.IO.TextWriter { 公共覆盖编码 { 获取{return new System.Text.UTF8Encoding();} }

    public override void WriteLine(string value)
    {
        System.Diagnostics.Trace.WriteLine(System.DateTime.Now.ToString("hh:mm:ss") + " " + value, "Information");
    }

    public override void WriteLine()
    {
        System.Diagnostics.Trace.WriteLine("", "Information");            
    }

    public override void WriteLine(string format, params object[] arg)
    {
        WriteLine(string.Format(format, arg));
    }
}

在本地模式下对ObjectDataSource使用ReportViewer控件,ObjectDataSource反过来使用带有“Get”方法的简单类,每个方法返回
IEnumerable

执行上述操作的示例(减去Linq):


只需编写“Get”方法来使用Linq,如果需要,还可以选择执行.ToList()。

只是想稍微结束一下这个循环

我们已经用LINQtoSQL应用程序实现了这一点,但它也可以用EF实现

基本上,它在上面列出的devx文章中列出

我们遇到了几件事,其中之一就是需要“展平”数据。我们有自定义例程将数据展平为一个行集,可以由SSRS报告使用。您还需要注意上面文章中的设置说明

提醒一下,我们需要在我们的实现中使用SSR的Web服务功能。如果您可以利用本地报告,那么就容易多了。如果您对域模型的本地报告感兴趣,下面是我刚刚遇到的一个使用nHibernate和SSR的好系列


John

谢谢。我们有一个“报表编写器”类型的角色,它是SQL类型的人,而不是程序员,因此这是他们访问SQL的最简单途径。不过,我非常喜欢连接DataContext的日志属性。谢谢!这帮了大忙,不幸的是,它似乎与客户端报表(RDLC)相关。我正在努力使报告与服务器端报告(RDC文件)一起使用。如果我能够确定发生了什么,我将提供更多信息。您指向Peter van Ooijen文章的链接非常适合此场景。我仅使用这两篇文章就解决了我的问题。
    public override void WriteLine(string value)
    {
        System.Diagnostics.Trace.WriteLine(System.DateTime.Now.ToString("hh:mm:ss") + " " + value, "Information");
    }

    public override void WriteLine()
    {
        System.Diagnostics.Trace.WriteLine("", "Information");            
    }

    public override void WriteLine(string format, params object[] arg)
    {
        WriteLine(string.Format(format, arg));
    }
}