Visual Studio 2008报告中的权限

时间:2020-03-06 14:46:33  来源:igfitidea点击:

我已经成功添加了一个自定义程序集,并使用AddTrustedCodeModuleInCurrentAppDomain将其添加到了报表中。我正在当前的appdomain中执行报告。

当我尝试访问SQL时,报告服务System.Data.SqlClient.SqlClientPermission失败。我如上所述尝试将System.Data添加到受信任的程序集中,但这无济于事。

如何确保存在此权限?

解决方案

从错误中听起来好像登录凭据已丢失。我们使用哪种授权?

如果我们使用的是Windows授权,则可能会失去"自己"的本领。从当前应用程序域拨打电话时听起来不太可能。我们可能需要更改连接字符串以指定用户名和密码。如果没有其他问题,它应该有助于调试。

祝你好运!

有运气吗?

我在本地模式下使用Visual Studio 2008中的ReportViewer控件,并以对象作为数据源。我的类映射到数据库中的数据表。在对象中,它根据需要加载相关对象。因此,它将引用保留为空,直到我们尝试使用该属性,然后尝试从数据库中自动加载它。这些类使用System.Data.SqlClient命名空间。

当我与Windows Forms应用程序中的对象进行交互时,一切都会按预期进行。但是,当我传递要用作报表数据源的对象并尝试自动加载相关对象时,它会失败。该代码创建一个SqlConnection对象,当我对其调用GetCommand()时,将引发以下异常:

[System.Security.SecurityException] {
"Request for the permission of type 'System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed."
} System.Security.SecurityException

我尝试搜索错误,但是显示的所有结果都是针对在SQL Server或者ASP.Net上运行的CLR程序集的。在创建SqlConnection对象之前,我曾尝试在代码中添加以下调用(如搜索结果中所建议的那样),但显然并没有执行任何操作:

System.Data.SqlClient.SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted).Assert();

我找到了解决方案。我们可以指定System.Security.Policy.Evidence来执行对LocalReport的程序集(或者具有足够权限的程序集)以在执行期间使用。

reportViewer.LocalReport.ExecuteReportInCurrentAppDomain(System.Reflection.Assembly.GetExecutingAssembly().Evidence);