none
Conexão do Crystal Report com o meu BD no servidor RRS feed

  • 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

    quinta-feira, 27 de junho de 2013 10:13

Todas as Respostas

  • alguem poderia me ajuda???
    quinta-feira, 27 de junho de 2013 11:56
  • por favor pessoal, estou mesmo necessitando ultrapassar este problema. alguem poderia me ajudar, ou pelo menos me indicar algo para estudar para que eu possa fazer algo sobre isso??

    aguardo e agradeço

    quinta-feira, 27 de junho de 2013 17:41
  • 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??????
    sexta-feira, 28 de junho de 2013 10:43
  • 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

    sexta-feira, 28 de junho de 2013 11:14
  • 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.

    sexta-feira, 28 de junho de 2013 12:09
  • 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

    sexta-feira, 28 de junho de 2013 12:14
  • 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.

    sexta-feira, 28 de junho de 2013 13:38
  • 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
    sexta-feira, 28 de junho de 2013 14:18
  • 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.

    sexta-feira, 28 de junho de 2013 15:22
  • pessloal ainda não consegui resolver este problema. ainda não aparece o meu relatório.. necessito de uma ajuda por favor
    segunda-feira, 1 de julho de 2013 12:05
  • Daniel vc olhou as permissoes do usuário iusr no servidor de banco ?

    Junior

    segunda-feira, 1 de julho de 2013 12:07
  • 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??

    segunda-feira, 1 de julho de 2013 13:23
  • 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

    segunda-feira, 1 de julho de 2013 13:36
  • entao,

    será que alguem poderia me indicar alguns exemplos de criar reports com crystal report utilizando dataset em vez de Stored Procedure??

    agradeceria--

    segunda-feira, 1 de julho de 2013 14:04