Inquiridor
Conexão do Crystal Report com o meu BD no servidor

Pergunta
-
Caros,
Criei um relatório no Crystal Reports com o Visual Studio 2010 e estou chamando em uma página ASPX, localmente funciona perfeitamente, porém, ao enviar para o servidor Web (windows server R2 - 64bit) não é possível conectar ao banco de dados. Instalei o CRRuntime_64bit_13_0_2 no lado do servidor. no relatório utilizei essa propriedades para conexão:
Tipo de Banco de Dados: OLE DB(ADO)Provedor: Microsoft OLE DB Provider for SQL Server.
Na conexão utilizei a segurança intergrada, visto que não tenho user nem password na bd. também na informaçao do servidor utilizei nome da minha máquina e nome e sqlexpress (FD-PC\SQLEXPRESS).
estes são configuraçoes na minha maquina local. só que no meu servidor IIS, tenho modificado a minha conexao com a BD visto que utilizo nome e password para conectar com a bd e na minha conectionstring tenho o Data Source=.\
caso rodar a pagina para gerar relatorios no meu servidor aparece este erro:
Erro Falha ao abrir a conexão. Detalhes: [Código do Fornecedor de Banco de Dados: 17 ] Falha ao abrir a conexão. CR_Factura_Proc {C6E79CC0-5267-416C-91E8-55B7B1895BD2}.rpt Detalhes: [Código do Fornecedor de Banco de Dados: 17 ]
o que devo fazer para ultrapassar este erro?? será que tenho de mudar a maneira do CR conectar com a BD, mas não sei onde fazer isso, pq no Visual Studio faço atravé do Database Expert onde sigo todos os passos para efectuar a conexao.... preciso de uma ajuda por favor...
Agradeço
Todas as Respostas
-
-
-
não sei se estou num bom caminho,
mas vi que tenho que criar o DataSourceConnection do Crystal report, e fiz da seguinte forma:
DataSourceConnections dataSourceConnections = rdoc.DataSourceConnections; IConnectionInfo connectInfo = dataSourceConnections[0]; connectInfo.SetConnection("servidor", "Base de Dados", "User ID", "Password");
feito isto, ao carregar o meu relatório, agora aparece o erro :
Erro Falha de logon no banco de dados.
Alguma dica?????? -
Flavio seu iis é outro servidor diferente do servidor de banco ?
se for eles estão no mesmo diminio um enxerga o outro ?
o usuário logado no servidor do iis tem que ser o mesmo e ter permissoes de acesso no servidor de banco.(recomendo que seja criada um usuario no servidor do banco e ser usuado esse usuario).
Junior
-
deixa eu explicar Junior,
tenho um usuario onde faço o login no servidor remotamente.
neste servidor tenho uma base de dados com Sql Server Authentication onde tenho criado um user e um password, e estes é os que passo na connectionString para efectuar a conexao da minha aplicação com a BD.
funciona, só que ao criar a CR tentei passar os mesmo credenciais, mas dá o erro.
-
Flavio nao sei no crystal mais no reportviewer eu crio um dataset ele é quem faz a conexão com o banco, no relatório não tenho nenhuma conexão com o banco de dados, esse dataset é que eu vinculo no relatorio onde ele já me tras os campos e coloco no relatorio.
Vc passando essas credenciais na sua aplicação funciona ? ela só da erro no relatorio ?
Junior
-
posso mostrar como criei o meu report, caso quiseres posso postar o meu cógido. mas a lógica foi essa. criei um report do Crystal Report, onde o select vem de uma stored procedure, e esse SP recebe um parametro. este parametro é apanhado de uma textob, por exemplo, e é passado pelo report. ao obter o valor e ao clicar num botao, o report é criado. fiz dessa forma
protected void Button1_Click(object sender, EventArgs e) { BindRep(); } private void BindRep() { DataTable dt = new DataTable(); SqlConnection conn = new SqlConnection(enlCon); SqlCommand cmd = new SqlCommand("Report_VerFactura", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@numero", textBox1.Text); SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(dt); ReportDocument rdoc = new ReportDocument(); rdoc.Load(Server.MapPath("~/Consultas/reports/CR_Factura_Proc.rpt")); rdoc.SetParameterValue("@numero", textBox1.Text); CrystalRViewer_Fact_Proc.ReportSource = rdoc; CrystalRViewer_Fact_Proc.Visible = true; }
na minha máquina local funciona perfeitamente. mas ao passar para o meu servidor, vi através de pesquisas que tenho que efectuar a conexão, então inseri esta parte no metodo BindRep
DataSourceConnections dataSourceConnections = rdoc.DataSourceConnections; IConnectionInfo connectInfo = dataSourceConnections[0]; connectInfo.SetConnection("servidor", "Base de Dados", "User ID", "Password");
onde servidor foi colocado o nome ou ip do meu servidor, Base de dados é o nome da minha BD, User iD é o nome do user que faço login na base de dados, e a password é do login também da base de dados.
ao gerar o report no servidor, este carrega um pouco e mostra o tal erro onde deveria mostra o report.
Erro Falha de logon no banco de dados.
-
Flavio seu servidor de IIS e banco de dados são o mesmo ?
Junior
- Editado Junior_luiz sexta-feira, 28 de junho de 2013 14:18 errei
-
Junior,
instalei o iis num windows server 2008 64bit, e também nesta mesma máquina instalei o Microsoft SQL Server 2008 onde coloquei a minha base de dados para esta aplicação. nesta mesma base dados tem a Autenticação como SQL Authentication onde tenho um user id e um password.
-
-
-
Junior,
continuo pesquisando outras formas e encontrei uma forma de fazer este report, desse jeito:
ReportDocument doc; //obter a string de conexao ja criada na web.con string enlCon = ConfigurationManager.ConnectionStrings["Conexaoo].ConnectionString; protected void Button1_Click(object sender, EventArgs e) { //passo o caminho do report e o nome do meu Stored Procedure ShowReport(Server.MapPath("~/Consultas/reports/CrystalReport.rpt"), "Report_VerFactura"); } private void ShowReport(String fileName, String strProcedureName) { TableLogOnInfo crTableLogOnInfo = new TableLogOnInfo(); ConnectionInfo crConnectionInfo = new ConnectionInfo(); CrystalDecisions.CrystalReports.Engine.Database crDatabase; CrystalDecisions.CrystalReports.Engine.Tables crTables; doc = new ReportDocument(); doc.Load(fileName); crConnectionInfo.ServerName = "ip_do_meu_servidor"; crConnectionInfo.DatabaseName = "nome_minha_BD"; crConnectionInfo.UserID = "nome_User"; crConnectionInfo.Password = "password"; crConnectionInfo.Type = ConnectionInfoType.SQL; crConnectionInfo.IntegratedSecurity = false; crDatabase = doc.Database; crTables = crDatabase.Tables; SqlConnection conn = new System.Data.SqlClient.SqlConnection(enlCon); SqlCommand cmd = new SqlCommand("dbo." + strProcedureName, conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@numero", textbox.Text); SqlDataAdapter adpt = new SqlDataAdapter(cmd); DataSet dataSet = new DataSet(); adpt.Fill(dataSet); foreach (CrystalDecisions.CrystalReports.Engine.Table crTable in crTables) { crTableLogOnInfo = crTable.LogOnInfo; crTableLogOnInfo.ConnectionInfo = crConnectionInfo; crTable.ApplyLogOnInfo(crTableLogOnInfo); } doc.SetParameterValue("@numero", textbox.Text); doc.SetDataSource(dataSet.Tables[0]); CRViewerFact.ReportSource = doc; CRViewerFact.Visible = true; }
ao efectuar o teste, coloco o valor no textbox para pesquisa e depois que mando gerar o report através do click do botão, agora simplesmente não aparece nada onde está o meu report "CRViewewFact"
dessa forma não aparece mais o erro de log na base de dados, mas também não retorna o meu resultado. o meu SP está correctamente, faço testes na minha maquina e funciona perfeitamente, só no servidor que não retorna valores....
o que devo fazer??
-
Flavio é como já te falei, relatorios para web vc tem que ter um dataset ligado ao relatorio, qdo vc vincula o relatorio ou datset isso permite que vc cole os campos do seu dataset(que são os campos do seu select) no relatorio.
Pelo menos é assim que funciona o report viewer, então creio que o crystal funcione da mesma forma.
Não aparece nada por isso, pq vc nao tem nenhuma vinculação de um com o outro.
Junior
-