我遇到了ReportViewer Control的版本问题。我正在使用visual studio 2010,但我认为我需要使用2005报表查看器,因为我使用的是SQL 2005.所以,我将webconfig文件设置为指向2005 ReportViewer .dll,一切正常,然后VS编辑网页.config指向2010版本的dll。以下是我认为正确的相关Web配置文件部分:
<httpHandlers>
<add path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" />
<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
validate="false" />
</httpHandlers>
<compilation>
<assemblies>
<add assembly="Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="Microsoft.ReportViewer.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
</assemblies>
<buildProviders>
<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</buildProviders>
</compilation>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd"
type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
因此,在运行它并运行几次后,它会自动将http处理程序的版本更改为10.0.0.0。我该如何防止这种情况?
答案 0 :(得分:3)
写入web.config的内容由您在项目中使用的引用定义。
在我的Visual Studio 2008项目中,我有以下参考:
所以在我的配置中我看到:
<system.web>
...
<compilation>
...
<buildProviders>
<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</buildProviders>
</compilation>
...
<httpHandlers>
<add verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>
</httpHandlers>
当我查看可用的项目参考时,我有三个:
我认为这是因为我安装了Visual Studio 2005,2008和2010,但是安装单个报表查看器可再发行组件可能会提供相同的选择:
N.B。我对版本号做了最好的猜测;如果你知道的更好,请纠正我。
答案 1 :(得分:1)
这不是您问题的准确答案,但可能是解决方案 无需使用旧版本的报告查看器。它独立于服务器。特别是使用.rdlc(客户端报告),您只提供数据并且报告不知道服务器。
答案 2 :(得分:1)
可以使用win form app访问SQL报告。使用VS2010开发的ReportViewer组件版本= 9.0.0.0。
以下是步骤:
要访问SQL 2005报告,您将必须使用报告查看器组件的Version = 9.0.0.0,如上所述。因此,您需要在要呈现报告的.aspx页面中或在其继承的母版页中使用此文件:
注册程序集=“Microsoft.ReportViewer.WebForms,Version = 9.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”namespace =“Microsoft.Reporting.WebForms”tagprefix =“rsweb”
这个
<form id="foo" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" ProcessingMode="Remote" Width="950px"
Height="600" BorderColor="Gainsboro" BorderStyle="Solid" BorderWidth="1px">
<ServerReport ReportPath="/foo/foo/FooReport"
ReportServerUrl="http://foo/ReportServerSQL2005" />
</rsweb:ReportViewer>
…
您可能还必须更改web.conig中任何其他版本的ReportViewer组件的引用,因为VS2010和更新版本将默认使用ReportViewer组件的新版本
e.g。
<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
更改为
<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
只需在整个解决方案中搜索Version = 8.0.0.0和Version = 10.0.0.0等,并对Version =和PublicKeyToken =
进行更改您还需要在项目中引用reportviewer组件9.0.0.0,从.net选项卡中删除对任何其他版本的引用。
值得注意的是,在VS中使用包含源视图和设计视图的.aspx页面时,它会在设计视图中显示错误创建控件 - ReportViewer1。根据我的阅读,这是组件的一个错误,但无论如何它在所有主流浏览器中都有效。
此外,如果您要将组件从工具拖到设计图面上,您很可能需要添加9.0.0.0版本并确保它是您使用的版本。
我之前在这里回答了这个问题:
http://forums.asp.net/p/1985629/5691326.aspx?VS2010+ReportViewer+with+SQL+2005
但是,我的应用程序是.NET 3.5 MVC2应用程序,但经过一番努力后,我仍然可以通过它来呈现SQL2005报告。
理想情况下,您应该将2005 SQL报告服务更新为2008,但是,请确保通过先创建副本/备份仍能正常工作,因为没有回头路。一旦你实现了这一点,上述所有内容都变得不必要,对我们来说这只是一个临时解决方案。