C# usando banco de dados nativo progress

Discussão em 'Progress 4GL' iniciado por angeloata, Setembro 22, 2009.

  1. angeloata

    angeloata Membro Participativo

    alguem sabe me dizer se e possível utilizar o banco de dados progress nativamente na linguagem C#?

    Att.
  2. pitsa

    pitsa Membro Participativo

    Não achei nenhuma alternativa nativa para acessar o progress sem utilizar conexões via ODBC. Desisisti de usar ODBC pois é extremamente lento se o acesso é muito concorrido.

    Passei a utilizar o WSA do OpenEdge para acessar via Web Service o progress..... cria as procedures no progress com consultas e gravacoes e qa partir doC# consumo o Web Service que disponibiliza estas procedures. Funciona muito rápido e até agora estável. Fiz todas minha camada de negócios dentro das procedures do progress e via C# (ASP.NET) todo o front-end de minha aplicação. Tenho dois clientes rodando deste jeito com muitos acessos e roda que é uma beleza....
  3. pitsa

    pitsa Membro Participativo

    Ahh vale lembrar que a progress disponibiliza um driver JDBC (Java) que acessa "nativamente" o banco de dados usando o padrão SQL....este driver JDBC até que é rápido....mas o progress via SQL ainda tem recursos limitados se comparando aos bancos nativamente SQL...

    então compensa vc utilzar ou o WSA ou o Open Cliente...da um search no psdn que tem documentação lá sobre isto...
  4. sl4v3r

    sl4v3r Membro Participativo

    Lembrando que o JDBC eh soh um pouco melhor que o ODBC.
    Vc pode utilizar o SONIC.
  5. hmarcone

    hmarcone Sem Pontuação

    Olá amigo!

    Esta sua solução é muito interessante. Será possível você dá mais detalhes?

    Obrigado
  6. kirchner

    kirchner Membro Participativo Moderador

    Na verdade tudo depende do que consideramos "nativo".

    Podemos dizer que o acesso ODBC ao Progress é nativo, pois o driver ODBC entende o protocolo do banco de dados e se comunica diretamente com ele, através de um socket. Não há nenhuma camada intermediária.
    Com o JDBC é a mesma coisa, é uma biblioteca que entende o protocolo do banco.

    Tanto que para o Progress não há diferença se o client é ODBC ou JDBC. Tudo é acesso SQL e é tratado de forma idêntica. Acho que o banco nem tem como diferenciar se é ODBC ou JDBC, e nem precisa. É igual, do ponto de vista do banco.

    Podemos até dizer que o ODBC é mais nativo que o JDBC, porque ODBC é compilado p/ código de máquina nativo, enquanto JDBC é um programa Java, que usa byte-code e terá seu código de máquina gerado em tempo de execução.

    Na minha experiência, a lentidão não está no fato de usar ODBC ou JDBC. O engine SQL do Progress é muito novo, começou na versão 9. Se compararmos com os produtos TOP de mercado, como o SQL Server ou Oracle, o Progress está engatinhando nesta área. Está muito atrás. O otimizador de consultas é muito simples e não consegue gerar um plano eficiente em vários cenários. O que é lento é o banco de dados mesmo. Atualizar as estatísticas frequentemente é um ótimo começo, mas só ajuda até um determinado ponto.

    Existe uma particularidade adicional com .NET e ODBC. As linguagens .NET geram código intermediário (MSIL) que executam na CLR. ODBC é código nativo. Existe interoperabilidade entre código .NET e código nativo, mas isso tem seu custo. Principalmente o marshaling de tipos de dados. Como o acesso a dados é basicamente acesso a dados, há um monte de conversão de dados. Isso acaba tornando o processo um pouco mais lento. Mas se o banco de dados responde em tempo adequado, normalmente este custo pode ser desprezado.

Compartilhe esta Página