Solved

Database logon failed when exporting Crystal Report to PDF

Posted on 2014-09-17
16
2,056 Views
Last Modified: 2014-12-29
I have converted a ASP.NET 1.0 app to 4.0.  It is a simple app with only 3 pages and 4 reports.  For the most part the conversion went well and on both my development machine and the production machine I can run it, navigate between the pages, retrieve and update data from a SQL Server 2008 R2 database.  On the development machine I can also create Crystal Reports which are then exported to PDF.  On the production machine however when I try to do this I get this message:

Server Error in '/EslCalls' Application.

--------------------------------------------------------------------------------

Database logon failed.

Description:
An unhandled exception occurred during the execution of the current web
request. Please review the stack trace for more information about the error and
where it originated in the code.

Exception Details:
System.Runtime.InteropServices.COMException: Database logon
failed.

Source Error:

An unhandled exception was generated during the execution of the
current web request. Information regarding the origin and location of the
exception can be identified using the exception stack trace below.

Stack Trace:

[COMException (0x8004100f): Database logon failed.] CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Export(ExportOptions pExportOptions, RequestContext pRequestContext) +0 CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) +362  [LogOnException: Database logon failed.] CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e) +909 CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) +471 CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext reqContext) +772 CrystalDecisions.CrystalReports.Engine.FormatEngine.Export(ExportRequestContext reqContext) +185 CrystalDecisions.CrystalReports.Engine.FormatEngine.Export() +115 CrystalDecisions.CrystalReports.Engine.ReportDocument.Export() +80 EslCalls.Reports.MakePDFfile(ReportDocument crpt, String ReportName) in C:\WebApps\EslCalls\Reports.aspx.vb:158 EslCalls.Reports.btnSubmit_Click(Object sender, EventArgs e) in C:\WebApps\EslCalls\Reports.aspx.vb:97 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +155 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3804  

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET
Version:4.0.30319.34209

On my development machine:

     Windows 7
     IIS 7
     Visual Studio 2010
     Crystal Reports for Visual Studio 2010
     The reports had been developed in Crystal XI but they were imported in to VS 2010 converted and saved
    The app runs under a application pool I created that uses a network Windows account that has all the
    necessary permission on the SQL Server  objects.
     In the web.config file identity impersonate is set to true.

On the production machine:

     Windows Server 2012 R2
     IIS 8
     SAP Crystal Reports runtime engine for. NET Framework (64-bit) 13.0.10.1385
    The app runs under a application pool I created that uses the same Windows account as on my
    development machine
     In the web.config file identity impersonate is set to true.

IIS and application are on one server and SQL Server is on another. The server that IIS is on is named Intranet02 and the Intranet02$ account has all the necessary permissions on the database objects.

The pertinent code:

Dim crpt As New ReportDocument()
crpt = New rptCategory()
ReportName = "Category"
MakeCrParameter(txtStartDate.Text, "@StartDate", crpt)
MakeCrParameter(txtEndDate.Text, "@EndDate", crpt)
FileName = MakePDFfile(crpt, ReportName)

Private Function MakePDFfile(ByVal crpt As ReportDocument, ByVal ReportName As String) As String
     Dim TodayFile As String = Month(Now) & Day(Now) & Year(Now)
     Dim FileName As String = ReportName & " " & Now.Month & "-" & Now.Day & "-" & Now.Year & "-" &
     Now.Second & ".pdf"
     Dim dfdo As New CrystalDecisions.Shared.DiskFileDestinationOptions()
     dfdo.DiskFileName = "C:\WebApps\EslCalls\Reports\" & FileName
     With crpt
          ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
          .ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat
          .ExportOptions.DestinationOptions = dfdo
          Export()
          Close()
          .Dispose()
     End With
     GC.Collect()
     GC.WaitForPendingFinalizers()
     MakePDFfile = FileName
     'Open a new window linked to the PDF file containing the report.  The window is resizable.
     Dim Script As String = "<Script language='javascript'> win=window.open('/EslCalls/Reports/" + FileName + "','Reports','width=800,height=500,resizable=1')</script>"

     Page.ClientScript.RegisterStartupScript(Me.GetType(), "Session Timed Out", Script, False)
     'Clear the form after the report has been created
     Clear()
End Function

The error occurs at the line
          Export()

Any suggestions would be greatly appreciated.
0
Comment
Question by:leskelly
  • 10
  • 5
16 Comments
 
LVL 18

Expert Comment

by:vasto
Comment Utility
There is no code to set database connection. The only way this can work is if you set the report to use an ODBC connection with integrated security or if you use a database without password. Check if you have the ODBC DSN file on the server. You need to provide more information about the database and connection
0
 

Author Comment

by:leskelly
Comment Utility
Hello vasto,

Thanks for your speedy response.  The database connection is a OLE DB (ADO) connection set within the report.  I'm sure the connection is correct as I can verify it in Visual Studio and can open the report it VS and through the app on my development machine.
0
 

Author Comment

by:leskelly
Comment Utility
I have a report that doesn't connect to a database and it opens on the production machine.  It seems like it must be a permissions issue but I don't know what it would be as the app should be running under the same account on both my development and my production machine and the reports open on my development machine.
0
 

Author Comment

by:leskelly
Comment Utility
I was thinking perhaps on the server the app was running under a different identity then I expected so I put Dim username As String = System.Security.Principal.WindowsIdentity.GetCurrent().Name
Response.Write("User = " & username)
right before the code that generates the report.  On both the production and development machines it shows the correct user account.
0
 
LVL 18

Expert Comment

by:vasto
Comment Utility
If your OLE DB connection is set to use windows authentication then it might work for you , but you need to grant permissions in the database for the user which is running the website
0
 

Author Comment

by:leskelly
Comment Utility
In IIS I have set a user I created as the identity of the app pool the app is running under and have given this user permissions on the database.  This is the same on both machines so I'm thinking that is the user’s credentials that the report is using.
0
 

Author Comment

by:leskelly
Comment Utility
I'm trying to create a new Datasource Location for one of the reports hard coding in a User ID and password instead of using Integrated Security but when I click on Finish I get this message:

Login failed.
Details:ADO Error Code: 0x80040e4d
Source: Microsoft OLE DB Provider for SQL Server
Description:Login failed for user 'HRanon'.
SQL State: 42000
Native Error: 18456 [Database Vendor Code 18456]

This happens even if I use my user name and password which has administrative permissions on both server.
0
 
LVL 18

Expert Comment

by:vasto
Comment Utility
You do not have any code that is going to set the report connection. When you run it locally it is using Windows authentication to get the data from the local database. When you run it on production this is not happening and report returns error. If you want to use username/password login you need to add code to set the connection
0
Zoho SalesIQ

Hassle-free live chat software re-imagined for business growth. 2 users, always free.

 

Author Comment

by:leskelly
Comment Utility
There is no local database.  Even when running the app on my development machine the data is coming from a network server.
0
 
LVL 18

Expert Comment

by:vasto
Comment Utility
What I meant is that you were probably used Integrated security an this was not working on the website. When you tried to change this to use username and password it is failing because you do not have code to set the connection info . Crystal is not saving the password for security reasons , It should be set each time the report is run.
0
 

Author Comment

by:leskelly
Comment Utility
When setting a Datasource Location within the report, by going to Crystal Reports-Database-Set Datasource location, if Integrated Security is not check there are fields for user name and password.  This is where I'm getting the message I had posted above.
0
 
LVL 18

Expert Comment

by:vasto
Comment Utility
Do you have subreports using different connection?
0
 

Author Comment

by:leskelly
Comment Utility
No there are no subreports in any of the reports.
0
 
LVL 100

Expert Comment

by:mlmcc
Comment Utility
Crystal does not save the password with the report so you must provide the password when you run the report.

When running the reports do you get prompted for a password?
If not you need to provide the password through the code.

mlmcc
0
 

Accepted Solution

by:
leskelly earned 0 total points
Comment Utility
I opened a discussion on the SAP website and one of the Support Engineers there told me what the issue is.  I needed to have the SQL native client installed on the server.  Once we did that the reports opened as I expected with out the need for a user name or password.  Thanks for you suggestions.
0
 

Author Closing Comment

by:leskelly
Comment Utility
I got the answer from the SAP website.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Introduction SQL Server Integration Services can read XML files, that’s known by every BI developer.  (If you didn’t, don’t worry, I’m aiming this article at newcomers as well.) But how far can you go?  When does the XML Source component become …
Ever wondered why sometimes your SQL Server is slow or unresponsive with connections spiking up but by the time you go in, all is well? The following article will show you how to install and configure a SQL job that will send you email alerts includ…
Via a live example, show how to backup a database, simulate a failure backup the tail of the database transaction log and perform the restore.
Via a live example, show how to setup several different housekeeping processes for a SQL Server.

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now