2010-05-11 22 views
5

Después de pasar unas buenas 3 a 4 horas en google tratando de encontrar alguna solución a mi problema, no he tenido mucha suerte.Crystal Reports Failed Database Login

Básicamente, utilizamos informes de cristal para nuestras aplicaciones .NET con un back-end de servidor sql, tenemos muchos clientes, cada uno con su propio servidor, por lo que nuestros informes deben tener sus conexiones configuradas dinámicamente. Hasta hace una semana, esto funcionó bien. Sin embargo, hace unos días, un cliente informó que recibía un aviso de inicio de sesión de la base de datos para un informe (solo un informe, el resto funcionó bien). Estábamos bastante perplejos, pero logramos reproducirlo en una netbook que no tenía instalado el visual studio o el servidor sql. Al final, el desarrollador decidió reproducir el informe con la esperanza de que fuera solo una rareza en ese informe en particular.

Lamentablemente, un nuevo cliente de hoy también experimentó el mismo problema, pero esta vez por cada informe de cristal que tuvieron, y también trabajaron en la netbook, por lo que estamos realmente perdidos aquí.

A continuación se muestra una captura de pantalla de lo que nuestros clientes obtengan presentados con -

Screenshot http://img404.imageshack.us/img404/1375/loginf.png

y aquí está el código que utilizo para configurar la información de conexión en el informe

   cI.ServerName = (string)builder["Data Source"]; 
       cI.DatabaseName = (string)builder["Initial Catalog"]; 
       cI.UserID = (string)builder["User ID"]; 
       cI.Password = (string)builder["Password"]; 

       foreach (IConnectionInfo info in cryRpt.DataSourceConnections) 
       { 
        info.SetConnection(cI.ServerName, cI.DatabaseName, cI.UserID, cI.Password); 
       } 

       foreach (ReportDocument sub in cryRpt.Subreports) 
       { 
        foreach (IConnectionInfo info in sub.DataSourceConnections) 
        { 
         info.SetConnection(cI.ServerName, cI.DatabaseName, cI.UserID, cI.Password); 
        } 
       } 

Como siempre , cualquier ayuda muy apreciada.

Respuesta

2

Solución encontrada, resultó que el constructor de conexión que el cliente usó para configurar su sistema no puso el nombre de instancia. Bastante confusamente la aplicación .net funcionó bien con eso de esa manera. Sin embargo, con los informes de cristal ordenados ahora funcionan sin problemas.

Gracias por su entrada Craig.

+0

Me enfrenta a un problema similar. ¿Puedes decir a qué te refieres con el generador de conexiones aquí y en tu código? Gracias –

2

Quizás el problema es la forma en que configura la información de autenticación. ¿Has considerado usar el método ReportDocument.SetDatabaseLogon? Llámalo una vez para cada conexión de base de datos única en el informe. Eliminará la necesidad de enumerar todas las tablas en el informe y, según recuerdo, la necesidad de enumerar también las tablas de subinforme.

+0

He intentado su sugerencia pero todavía obtengo el mismo error con la prueba; sin embargo, ahora tiene un nombre de base de datos en el indicador de inicio de sesión. Aun así falla si trato de ingresar la contraseña correcta. – Marlon

+0

¿Se establece el campo dataase? Si proporciona las credenciales de inicio de sesión correctas cuando el informe lo solicita, ¿funciona el informe como se esperaba? – craig

+0

Si codifica los valores en SetDatabaseLogon, como reportDocument.SetDatabaseLogon ("cuenta", "contraseña", "base de datos", "servidor"), ¿funciona? Para asegurarse de que se está configurando la información de inicio de sesión del subinforme, agregue este bit a su ciclo de informe integrado también. Déjame saber cómo funciona y probaremos la próxima prueba. – craig

0

La búsqueda de una solución a un problema similar me llevó a esta pregunta. Mi problema/solución fue un poco diferente, pero supongo que otros con mi problema terminarán aquí, así que publicaré mi solución aquí.

Si los usuarios están viendo algo como esto cuando se trata de una vista previa de un informe:

Crystal Reports Viewer screen shot

continuación, al establecer la información de inicio de sesión de SQL Server para el informe, asegúrese de incluir el servicio de nombres. Entonces, por ejemplo, asegúrate de darle a Crystal "myserver \ myservice" en lugar de solo "myserver".

Mi programa puede acceder a los datos de SQL Server usando solo "myserver", pero Crystal debe tener "myserver \ myservice".

Cuestiones relacionadas