[firebase-br] Firebird ADO.NET Data Provider.
marcelo - teflamar
marcelo em teflamar.com.br
Qui Set 16 14:27:55 -03 2010
vc pode também tentar com o dataset, puxar os dados para ele e fechar
a conexão.
depois, alterar o que tiver que alterar, e atualizar os dados.
Em 15/09/2010 14:49, Leonardo Vinicius Freitag escreveu:
> Olá pessoal!
>
> Estou com um problema, já pesquisei bastante e não consigo resolver.
> Desenvolvi um Web Service para ser consumido por um software que roda em
> Pocket PC com Windows Mobile. Esse Web Service utiliza a Firebird
> ADO.NETData Provider para acessar um banco de dados de um determinado
> sistema que
> possuo.
> Segue exemplo de um WebMetod:
>
> [WebMethod] // método que 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();
> }
>
> Segue exemplo de GetConexao();
> 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;
>
> appConexao = cs.ToString();
>
> return appConexao;
> }
>
> Tudo funcionava bem, porém deparei-me com uma situação em que acontece um
> travamento e me é apresentada uma mensagem no Pocket que finalizava com:
>
> Server was unable to process request.
> ---> Timeout exceeded.
>
>
> Tentei utilizar esse mesmo WebMethod para ler produtos no banco de dados
> utilizando o Firefox (navegador), e depois de exatos 15 segundos obtive a
> seguinte resposta:
>
> System.SystemException: Timeout exceeded.
> at FirebirdSql.Data.FirebirdClient.FbConnectionPool.CheckMaxPoolSize()
> at FirebirdSql.Data.FirebirdClient.FbConnectionPool.CheckOut()
> at FirebirdSql.Data.FirebirdClient.FbConnection.Open()
> at Service.LerProduto(String produtoCodigo)
>
> Resolvi então compartilhar meu problema na lista e pedir encarecidamente a
> atenção e ajuda dos companheiros.
>
> Leonardo Freitag.
> ______________________________________________
> 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