2008-09-26 10 views
3

J'ai ajouté un assembly personnalisé avec succès, ajouté au rapport en utilisant AddTrustedCodeModuleInCurrentAppDomain. J'exécute le rapport dans le domaine actuel.Autorisation dans les rapports Visual Studio 2008

Lorsque j'essaie d'accéder à SQL, j'obtiens des services de reporting System.Data.SqlClient.SqlClientPermission failed. J'ai essayé d'ajouter System.Data aux assemblys de confiance comme ci-dessus mais cela n'aide pas.

Comment puis-je m'assurer que cette permission est présente?

Répondre

1

De l'erreur se produit comme si vos informations de connexion étaient perdues. Quel type d'autorisation utilisez-vous?

Si vous utilisez l'autorisation Windows, vous risquez de perdre votre «identité». Ne semble pas probable lorsque vous appelez du domaine actuel. Vous souhaiterez peut-être modifier la chaîne de connexion pour spécifier un nom d'utilisateur et un mot de passe. Si rien d'autre cela devrait aider dans le débogage.

Bonne chance!

1

Une chance avec ça? J'utilise le contrôle ReportViewer à partir de Visual Studio 2008 en mode local avec des objets en tant que source de données. Mes classes sont mappées sur des tables de données dans ma base de données. Dans les objets, il charge les objets associés selon les besoins. Il laisse donc la référence null jusqu'à ce que vous essayiez d'utiliser la propriété, puis il essaie de la charger automatiquement à partir de la base de données. Les classes utilisent l'espace de noms System.Data.SqlClient.

Lorsque j'interagis avec les objets dans mon application Windows Forms, tout fonctionne comme prévu. Mais lorsque je passe l'objet à utiliser comme source de données de rapport et qu'il essaie de charger automatiquement l'objet associé, il échoue. Le code crée un objet SqlConnection et quand je l'appelle GetCommand() à ce sujet, l'exception suivante est levée:

[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 

J'ai essayé la recherche de l'erreur, mais tous les résultats qui apparaissent sont pour des ensembles CLR en cours d'exécution sur un serveur SQL ou ASP.Net. Je l'ai essayé d'ajouter l'appel suivant dans mon code (comme suggéré dans les résultats de recherche) avant de créer les objets SqlConnection, mais il n'a pas fait apparemment rien:

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

J'ai trouvé la solution. Vous spécifiez System.Security.Policy.Evidence de l'assembly exécutant (ou un qui a des droits suffisants) au LocalReport à utiliser pendant l'exécution.

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