.Net может ли Crystal Reports 13 использовать удостоверение пула приложений для входа в SQL Server? - PullRequest
0 голосов
/ 05 октября 2018

В веб-форму встроен отчет Crystal, но он не может подключиться к SQL Server с использованием идентификатора пула приложений.У нас есть сервер sql, использующий учетную запись службы для доступа к веб-приложению.Я настроил идентификатор пула приложений с учетными данными учетной записи службы.Мое веб-приложение может подключаться к SQL Server.Crystal report 13 и SQL SERVER 2016 web.config

<add name="ConnName" connectionString="server=ServerName; database=DB_Name; Trusted_Connection=yes;" providerName="System.Data.SqlClient"

и измененная настройка базы данных Crystal Report

SqlConnectionStringBuilder conString = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnName"].ToString());
foreach (CrystalDecisions.Shared.IConnectionInfo RC in CReport.DataSourceConnections)
{
    RC.SetConnection(connectionInfo.ServerName, connectionInfo.DatabaseName, true);
    foreach (ReportDocument subReport in CReport.Subreports)
    {
        foreach (CrystalDecisions.Shared.IConnectionInfo subConn in subReport.DataSourceConnections)
        {
        rptConn.SetConnection(connectionInfo.ServerName, connectionInfo.DatabaseName, true);
        }
    }
}

Несмотря на то, что я изменил соединение с отчетом, он по-прежнему запрашивает вход в базу данных.Как я могу динамически установить логин Crystal Report для сервера SQL с использованием учетных данных учетной записи службы?или если я использую доверенное соединение, как я олицетворяю личность пула приложений.

1 Ответ

0 голосов
/ 05 октября 2018

Ниже приведен пример кода, взятый из Нажмите, чтобы перейти на сайт .Это пример кода, но хорошая отправная точка.Сравните с тем, что у вас есть в настоящее время, и посмотрите, есть ли какая-либо разница.

using System;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ReportDocument cryRpt = new ReportDocument();
            TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
            TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
            ConnectionInfo crConnectionInfo = new ConnectionInfo();
            Tables CrTables ;

            cryRpt.Load("PUT CRYSTAL REPORT PATH HERE\CrystalReport1.rpt");

            crConnectionInfo.ServerName = "YOUR SERVER NAME";
            crConnectionInfo.DatabaseName = "YOUR DATABASE NAME";
            crConnectionInfo.UserID = "YOUR DATABASE USERNAME";
            crConnectionInfo.Password = "YOUR DATABASE PASSWORD";

            CrTables = cryRpt.Database.Tables ;
            foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
            {
                crtableLogoninfo = CrTable.LogOnInfo;
                crtableLogoninfo.ConnectionInfo = crConnectionInfo;
                CrTable.ApplyLogOnInfo(crtableLogoninfo);
            }

            crystalReportViewer1.ReportSource = cryRpt;
            crystalReportViewer1.Refresh(); 
        }
    }

}
...