sumar services porcentaje grupos formato filas fecha crear cambiar agrupar c# winforms visual-studio-2008 reporting-services sqlclient

c# - porcentaje - sumar filas en reporting services



Visor de informes: no se pudo completar la solicitud del permiso de tipo SqlClientPermission (5)

Estoy usando el control ReportViewer de Visual Studio 2008 en modo local con objetos como fuente de datos. Mis clases están mapeadas en tablas de datos en mi base de datos. En los objetos, carga objetos relacionados según sea necesario. Por lo tanto, deja la referencia nula hasta que intente utilizar la propiedad, luego intenta cargarla desde la base de datos automáticamente. Las clases usan el espacio de nombres System.Data.SqlClient.

Cuando interactúo con los objetos en mi aplicación Windows Forms, todo funciona como se esperaba. Pero cuando paso el objeto que se utilizará como Fuente de datos de informe e intenta cargar automáticamente el objeto relacionado, falla. El código crea un objeto SqlConnection y cuando invoco GetCommand () en él, se lanza la siguiente excepción:

[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

Intenté buscar el error, pero todos los resultados que aparecen son para ensamblajes CLR que se ejecutan en SQL Server o ASP.Net. Intenté agregar la siguiente llamada en mi código (como se sugiere en los resultados de búsqueda) antes de crear los objetos SqlConnection, pero aparentemente no hizo nada:

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

¿Algunas ideas?


Un pensamiento rápido, aunque este no es un error que he visto, asegúrese de que su Assert tenga el mismo método que el código que establece la fuente de datos de recursos:

System.Data.SqlClient.SqlClientPermission mPermission = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted); try { mPermission.Assert(); //rest of your code } //Handle Exceptions

Las aseveraciones de permisos no duran mucho tiempo, pueden ser un problema de seguridad, por lo que es más probable que funcionen lo más cerca posible del código que los necesita.


Encontré la solución. Especifique System.Security.Policy.Evidence del ensamblado que está ejecutando (o uno que tenga suficientes derechos) en el informe local para usarlo durante la ejecución.

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


Solo en caso de que alguien se tropiece con esto como lo hice mientras buscaba este Permiso-Error. Obtuve este error al usar una aplicación Windows Forms porque el cliente había vinculado un acceso directo a mi aplicación-Exe en su equipo con "/ COMPUTERNAME / C $ / Application.exe" en lugar de "C: / Application.exe". - Esto causó la falla de System.Security.Permission debido al uso de la intranet que no es de confianza.

Consulte http://www.duelec.de/blog/?p=236 para obtener más información.


Además de la respuesta de CuppM. El método ExecuteReportInCurrentAppDomain está en desuso debido a que se debe usar LocalReport.SetBasePermissionsForSandboxAppDomain y LocalReport.SetBasePermissionsForSandboxAppDomain su lugar, ya que ReportViewer ahora siempre se ejecuta en el dominio de espacio aislado:

PermissionSet permissions = new PermissionSet(PermissionState.None); permissions.AddPermission(new FileIOPermission(PermissionState.Unrestricted)); permissions.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); ReportViewer1.LocalReport.SetBasePermissionsForSandboxAppDomain(permissions);

Ver detalles aquí .


Una nota al pie de la respuesta de Artem arriba ...

Tuve este problema al agregar Autenticación de Windows a mi aplicación asp.net. Targeting Framework 4.5 y uso de los componentes de Informes 11. Cuando permitía usuarios anónimos (en el primer desarrollador) no tuve problemas para usar ReportViewer. Tan pronto como habilité la autenticación de Windows obtendría "#Error" en expresiones de agrupamiento, o no podría ejecutar el informe en absoluto, dando la excepción mencionada anteriormente.

Pude solucionar el problema, pero con una versión ligeramente modificada de lo que Artem publicó. No estoy completamente seguro de qué es lo que hace el código, además de la sensación general de que permite que CAS confíe en el código de Sandboxed ReportViewer. Cualquier comentario con una pequeña explicación sería apreciado.

Dim permissions As PermissionSet = New PermissionSet(PermissionState.Unrestricted) myReportViewer.LocalReport.SetBasePermissionsForSandboxAppDomain(permissions)