[firebase-br] Firebird ADO.NET Data Provider.

Leonardo Vinicius Freitag freitagnx em gmail.com
Qui Set 16 09:11:57 -03 2010


Informações que são colocadas na connection string:


    public string GetConexao()
    {
        appIp = ConfigurationManager.AppSettings.Get("Key0");
        appCaminho = ConfigurationManager.AppSettings.Get("Key1");
        appUser = ConfigurationManager.AppSettings.Get("Key2");
        appSenha = ConfigurationManager.AppSettings.Get("Key3");
        //appDialect = ConfigurationManager.AppSettings.Get("Key4");

        FbConnectionStringBuilder cs = new FbConnectionStringBuilder();
        cs.DataSource = appIp;
        cs.Database = appCaminho;
        cs.UserID = appUser;
        cs.Password = appSenha;
        cs.Dialect = appDialect;
        cs.ConnectionLifeTime = 1;
        cs.ConnectionTimeout = 15;
        cs.MaxPoolSize = 200;
        cs.Port = 3050;
        cs.Pooling = true;

        appConexao = cs.ToString();

        return appConexao;
    }

Em cada WebMethod que precisa busar alguma informação no banco de dados, fiz
como no exemplo:

    [WebMethod] // método que lê e retorna dados do produto
    public Produtos LerProduto(string produtoCodigo)
    {
        Produtos meuProduto = new Produtos();

        string connectionString;
        cnDados stringConexao = new cnDados();
        connectionString = stringConexao.GetConexao();


        // abertura da conexão e início da transação
        FbConnection connection = new FbConnection(connectionString);
        connection.Open();
        FbTransaction transaction = connection.BeginTransaction();

        // exeução do comando no banco de dados
        string selectQuery = "SELECT COD_ESTOQUE, NOME, PRECO_VENDA, GRUPO
FROM ESTOQUE WHERE COD_ESTOQUE = @ICOD_ESTOQUE";
        FbCommand command = new FbCommand(selectQuery, connection,
transaction);
        command.Parameters.Add("@ICOD_ESTOQUE", produtoCodigo);
        FbDataReader leitor = command.ExecuteReader();

        try
        {
            if (leitor.Read())
            {
                meuProduto.ProdCodigo = leitor.GetString(0);
                meuProduto.ProdDescricao = leitor.GetString(1);
                meuProduto.ProdPreco = leitor.GetFloat(2);
                meuProduto.ProdGrupo = leitor.GetString(3);
            }
            else
            {
                meuProduto.ProdCodigo = "";
                meuProduto.ProdDescricao = "";
                meuProduto.ProdPreco = 0;
                meuProduto.ProdGrupo = "";
            }
            return meuProduto;
        }
        catch (Exception e)
        {
            throw new Exception();
        }
        finally
        {
            transaction.Commit();
            leitor.Close();
            connection.Close();
        }
    }

Porém, ontem de noite fiz novos testes, e continuo obtendo o travamento,
depois de lançar umas 80 mesas. Eu imagino que o problema seja relativo ao
número de conexões, pois cada vez que preciso ler alguma informação,
conecto, faço a leirua e fecho a conexão. Só que me parece que as conexões
não estão sendo fechadas, e estou atingindo o número limite permitido.

Leonardo Freitag

Em 15 de setembro de 2010 17:05, renato <centriscorps em gmail.com> escreveu:

> Um exemplo de connection string.
> Coloque dentro do seu web.config
>
>
> <appSettings>
>  <add key="nome_chave" value="User=SYSDBA; Password=masterkey;
>    Database=c:\pasta\banco.fdb; DataSource=10.1.1.1; Port=3050; Dialect=3;
> Charset=NONE;
>    Role=; Connection lifetime=15; Pooling=true;  MinPoolSize=0;
> MaxPoolSize=50;
>    Packet Size=4092; ServerType=0"/>
> </appSettings>
>
> A descrição desses parâmetros e de outros você encontra em
> http://www.firebirdsql.org/firebirdtutorial/index.html
>
>
> Renato
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista