Ошибка «Сбой входа в базу данных» при экспорте отчета crystal в pdf в .NET

#iis #operating-system #crystal-reports #odbc

Вопрос:

Мы создали веб-службу в .NET для экспорта отчета crystal в pdf, и она работает, как и ожидалось, на машине разработки, но при развертывании с использованием IIS на рабочем сервере появляется ошибка «Не удалось войти в базу данных».

Ниже приведен код, разработанный для экспорта отчета crystal в pdf

 public class CryRepWebService : System.Web.Services.WebService  {   [WebMethod]  public string InvoiceReportCry(int Invoiceid, int docType, string Proj)  {  string project;  int docTypes;  int InvoiceIds;  try  {  ReportDocument cryRpt = new ReportDocument();  cryRpt.Load(Server.MapPath("~/Reports/myreport.rpt"));  string USERNAME = "useruser";//Default user Name  string PWD = "pwdpwd$";//Default pwd Name  string DSN_NAME = "mydsn";  string INITIAL_CATALOG = "dbname";  string serverName = (string)Registry.GetValue(@"HKEY_LOCAL_MACHINESOFTWAREODBCODBC.INI"   DSN_NAME, "Server", null);  cryRpt.SetDatabaseLogon(USERNAME, PWD, serverName, INITIAL_CATALOG);  // create the connection information  ConnectionInfo conRpt = new ConnectionInfo();  conRpt.ServerName = serverName;  conRpt.DatabaseName = INITIAL_CATALOG;  conRpt.UserID = USERNAME;  conRpt.Password =PWD;  // apply connection information to the report tables  Tables rptTables = cryRpt.Database.Tables;  for (int i = 0; i lt; rptTables.Count; i  )  {  CrystalDecisions.CrystalReports.Engine.Table rptTable = rptTables[i];  TableLogOnInfo tblInfo = rptTable.LogOnInfo;  tblInfo.ConnectionInfo = conRpt;  // next table  }  // if the report contains sub reports, you will need to set the connection info there too  if (cryRpt.Subreports.Count gt; 0)  {  for (int i = 0; i lt; cryRpt.Subreports.Count; i  )  {  using (ReportDocument rptSub = cryRpt.OpenSubreport(cryRpt.Subreports[i].Name))  {  Tables rptTables1 = rptSub.Database.Tables;  for (int j = 0; j lt; rptTables.Count; j  )  {  CrystalDecisions.CrystalReports.Engine.Table rptTable = rptTables1[i];  TableLogOnInfo tblInfo = rptTable.LogOnInfo;  tblInfo.ConnectionInfo = conRpt;  // next table  }  rptSub.Close();  }  }  }  ParameterValues crParameterValues = new ParameterValues();  ParameterDiscreteValue crParameterDiscreteValue = new ParameterDiscreteValue();  ParameterDiscreteValue crParameterDiscreteValue1 = new ParameterDiscreteValue();  ParameterDiscreteValue crParameterDiscreteValue2 = new ParameterDiscreteValue();    cryRpt.SetParameterValue("@Invoiceid", Invoiceid);  cryRpt.SetParameterValue("@docType", docType);  cryRpt.SetParameterValue("@Proj", Proj);  project = Proj;  docTypes = docType;  InvoiceIds = Invoiceid;  bool folderExists = Directory.Exists(@"D:CrystalReportsTest_Pdf");  if (!folderExists)  Directory.CreateDirectory(@"D:CrystalReportsTest_Pdf");  cryRpt.ExportToDisk(ExportFormatType.PortableDocFormat, @"D:CrystalReportsTest_Pdftest-"   Invoiceid   ".pdf");  return project   InvoiceIds   docTypes;  }  catch (Exception ex)  {  ExceptionLogging.SendErrorToText(ex);  return null;  }  }  }  

Ниже приведены технические характеристики обеих сред:

Система Разработки :

 Windows 7 Professional (64-bit) Visual Studio 2015 Sql  Server 2012  ODBC Driver - Sql Server SAP Crystal Reports 2016 (SP6) (version 14.2.6.2839) SAP Crystal Reports runtime engine for .NET Framework(64-bit)(version 13.0.30.3805)  SAP Crystal Reports, version for Microsoft Visual Studio (version 13.0.30.3805)  IIS (7.5)  

Рабочий Сервер:

 Windows Server 2012 R2 Standard (64-bit)  Visual Studio 2015  Sql Server 2019   ODBC Driver - Sql Server Native Client 10.0  SAP Crystal Reports 2016 (SP4) (version 14.2.4.2410)   SAP Crystal Reports 2016 (SP9) update (version 14.2.9.3791)  SAP Crystal Reports runtime engine for .NET Framework(64-bit) (version 13.0.30.3805)   SAP Crystal Reports, version for Microsoft Visual Studio (version 13.0.30.3805)   IIS (8.5)  

Пожалуйста, кто-нибудь, помогите нам с решением, чтобы попробовать.

Заранее спасибо.

Марути А

Комментарии:

1. «Сбой входа в базу данных» — учетные данные для БД в порядке?

2. ДА. Более того, проверено открытие того же .rpt в Crystal designer с указанием значений параметров и ожидаемого результата.

Ответ №1:

Попробуйте включить 32-разрядные приложения в пуле приложений сервера IIS.

  1. Откройте диспетчер IIS и нажмите на Пул приложений в левом окне.
  2. Щелкните правой кнопкой мыши пул приложений, для которого вы хотите включить 32-разрядные приложения, и выберите в контекстном меню пункт Дополнительные настройки.
  3. В окне Дополнительных настроек найдите Enable 32-Bit Applications свойство, установите для него значение True и нажмите кнопку ОК.

введите описание изображения здесь

Комментарии:

1. Спасибо @samwu. Попробовал предлагаемое изменение, но никаких изменений (проблема все еще существует).

2. Ваш источник данных ODBC 32-разрядный или 64-разрядный?

3. Источник данных ODBC (системный DSN) является 32-разрядным.