Динамическое изменение пути к базе данных Crystal Report с помощью кода C # при загрузке формы с помощью средства просмотра отчетов - PullRequest
0 голосов
/ 18 декабря 2011

У меня есть простое приложение, которое подключается к базе данных Access (.mdb).Я подключил файл базы данных к приложению, используя только код.Строка подключения выглядит следующим образом:

"Provider = Microsoft.Jet.OLEDB.4.0; Источник данных = | DataDirectory | \ CentreDB.mdb; Jet OLEDB: Пароль базы данных = pass"

Для целей проектирования я подключил файл базы данных к отчету Crystal Report, используя параметр «Подключить файл базы данных» в мастере отчетов.Но мне нужно использовать код для динамического назначения базы данных для отчета Crystal, чтобы у меня не возникало проблем при развертывании его на клиентском компьютере.Я попытался использовать этот код ниже.

public void ViewReport(FileInfo crFileInfo) // path\filename.rpt
        {
            ConnectionInfo crConnectionInfo = new ConnectionInfo();
            crConnectionInfo.ServerName = "YOUR SERVER NAME";
            crConnectionInfo.DatabaseName = "YOUR DATABASE NAME";
            crConnectionInfo.UserID = "YOUR DATABASE USERNAME";
            crConnectionInfo.Password = "YOUR DATABASE PASSWORD";

            // CrystalReportViewer control
            crViewer.ReportSource = ReportSourceSetup(crFileInfo, crConnectionInfo);
            crViewer.Refresh();
        }

        ReportDocument ReportSourceSetup(FileInfo crFileInfo, ConnectionInfo crConnectionInfo)
        {
            ReportDocument crDoc = new ReportDocument();
            TableLogOnInfos crTableLogonInfos = new TableLogOnInfos();
            TableLogOnInfo crTableLogonInfo = new TableLogOnInfo();
            Tables crTables;

            crDoc.Load(crFileInfo.FullName);

            // Each table in report needs to have logoninfo setup:
            crTables = crDoc.Database.Tables;
            foreach (CrystalDecisions.CrystalReports.Engine.Table crTable in crTables)
            {
                crTableLogonInfo = crTable.LogOnInfo;
                crTableLogonInfo.ConnectionInfo = crConnectionInfo;
                crTable.ApplyLogOnInfo(crTableLogonInfo);
            }

            return crDoc;
        } 

Я нашел этот пример в сети, но не могу заставить его работать.Мне нужно знать, где именно это нужно разместить и что я должен передать для «ИМЯ ВАШЕГО СЕРВЕРА», «ИМЯ ВАШЕЙ БАЗЫ ДАННЫХ», поскольку я использую файл базы данных только с паролем.Я думаю, что объект FileInfo несет путь к базе данных.Пожалуйста, помогите мне, если это возможно.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 18 декабря 2011

С доступом, я полагаю, вы должны указать DSN в качестве имени сервера, поэтому настройте DSN на машине и сделайте ссылку на него следующим образом ... если вы назвали dsn access_dsn:

        ConnectionInfo crConnectionInfo = new ConnectionInfo();
        crConnectionInfo.ServerName = "access_dsn"; //dsn name
        crConnectionInfo.DatabaseName = ""; //leave blank, it knows from DSN
        crConnectionInfo.UserID = "YOUR DATABASE USERNAME";
        crConnectionInfo.Password = "YOUR DATABASE PASSWORD";
...