Разрешение в отчетах Visual Studio 2008 - PullRequest
3 голосов
/ 26 сентября 2008

Я успешно добавил пользовательскую сборку, добавил ее в отчет, используя AddTrustedCodeModuleInCurrentAppDomain. Я выполняю отчет в текущем домене приложения.

Когда я пытаюсь получить доступ к SQL, я получаю службы отчетов System.Data.SqlClient.SqlClientPermission failed. Я пытался добавить System.Data к доверенным сборкам, как указано выше, но это не помогает.

Как мне убедиться в наличии этого разрешения?

Ответы [ 3 ]

1 голос
/ 05 ноября 2008

Вам повезет с этим?

Я использую элемент управления ReportViewer из Visual Studio 2008 в локальном режиме с объектами в качестве источника данных. Мои классы сопоставлены с таблицами данных в моей базе данных. В объектах он загружает связанные объекты по мере необходимости. Таким образом, он оставляет ссылку на ноль до тех пор, пока вы не попытаетесь использовать свойство, а затем попытается автоматически загрузить его из базы данных. Классы используют пространство имен 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 

Я попытался найти ошибку, но все результаты отображаются для сборок CLR, работающих на SQL Server или ASP.Net. Я пытался добавить следующий вызов в мой код (как это было предложено в результатах поиска) перед созданием объектов SqlConnection, но он, очевидно, ничего не делал:

System.Data.SqlClient.SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted).Assert();
1 голос
/ 26 ноября 2008

Я нашел решение. Вы указываете System.Security.Policy.Evidence о том, что вы выполняете сборку (или ту, которая имеет достаточные права) для LocalReport для использования во время выполнения.

reportViewer.LocalReport.ExecuteReportInCurrentAppDomain(System.Reflection.Assembly.GetExecutingAssembly().Evidence);
1 голос
/ 26 сентября 2008

Из-за ошибки звучит, как ваши учетные данные будут потеряны. Какой вид авторизации вы используете?

Если вы используете авторизацию Windows, вы можете потерять свое «я». Не похоже, что вы звоните с текущего домена приложения. Вы можете изменить строку подключения, указав имя пользователя и пароль. Если ничего другого, это должно помочь в отладке.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...