[firebase-br] Res: Banco de dados consumindo toda a memória do SO

Evandro's mailing lists (Please, don't send personal messages to this address) listasjr em gmail.com
Sex Abr 16 12:40:28 -03 2010


Estou usando o provider .Net.

http://www.ibphoenix.com/main.nfs?page=ibp_download_dotnet

Para cada conjunto de operações eu inicio uma transação.

Como esta apaginacao do servidor?
Essa pergunta eu não sei resolver.

Fecho a transação antes de começar a segunda e não estou usando thread.

Ai vai o código, espero que você entenda C#:
Obrigado,
-Evandro


        /// <summary>
        /// Toca letra acentuada pela letra sem acento e ç por c
        /// </summary>
        /// <param name="texto"></param>
        /// <returns></returns>
        public string RemoverAcentos(string texto)
        {
            string s = texto.Normalize(NormalizationForm.FormD);

            StringBuilder sb = new StringBuilder();

            for (int k = 0; k < s.Length; k++)
            {
                UnicodeCategory uc =
CharUnicodeInfo.GetUnicodeCategory(s[k]);
                if (uc != UnicodeCategory.NonSpacingMark)
                {
                    sb.Append(s[k]);
                }
            }
            return sb.ToString();
        }

        private void btnCorrigirCidades_Click(object sender, EventArgs e)
        {
            configuracaoSalvar();
            D.Bd = new Bd();
            D.Bd.ConStr = D.ConexaoParamentros();
            try
            {
                D.Bd.Connect();
            }
            catch (Exception ex)
            {
                NeoDebug.Debug.ErrorRecord("Não foi possível conectar ao
banco de dados " + ex.Message + " " + ex.StackTrace);
                NeoException.FE.Show("Não foi possível conectar ao banco de
dados ", "Erro", ex.Message + " " + ex.StackTrace);
                System.Environment.Exit(1);
            }

            DataTable completo = D.Bd.DataTablePreenche("select CODIGO,
DESCRICAO, COD_UF FROM CIDADE ORDER BY CODIGO DESC");
            DataTable c;
            List<int> cLst;
            FbTransaction dbTrans = null;
            string antes, depois="";
            for (int y = 0; y < completo.Rows.Count; ++y)
            {
                antes = D.Bd.T("Select DESCRICAO FROM CIDADE WHERE CODIGO =
" + completo.Rows[y][0]);
                depois = RemoverAcentos(antes.ToUpper().Trim());
                D.Bd.ExecuteNonQuery("UPDATE CIDADE SET DESCRICAO = '" +
depois + "' where CODIGO = " + completo.Rows[y][0]);

            }

            for(int y=0; y < completo.Rows.Count; ++y){
                cLst = D.Bd.LstI("Select CODIGO FROM CIDADE WHERE COD_UF =
'" + completo.Rows[y][2] + "' TRIM(UPPER(DESCRICAO)) = TRIM(UPPER('" +
completo.Rows[y][1].ToString().Replace("'", "''") + "'))", dbTrans);
                if(cLst.Count > 1){ // repetido
                    for (int z = cLst.Count - 1; z >= 1; --z)
                    {
                        dbTrans = D.Bd.Con.BeginTransaction();
                        D.Bd.ExecuteNonQuery("update fornecedor F SET
F.cod_cidade = " + cLst[0] + " WHERE F.cod_cidade = " + cLst[z], dbTrans);
                        D.Bd.ExecuteNonQuery("update cliente C SET
C.cod_cidade = " + cLst[0] + " WHERE C.cod_cidade = " + cLst[z], dbTrans);
                        D.Bd.ExecuteNonQuery("update cliente C SET
C.cod_cidade_cobranca = " + cLst[0] + " WHERE C.cod_cidade_cobranca = " +
cLst[z], dbTrans);
                        D.Bd.ExecuteNonQuery("update FUNCIONARIO f set
f.COD_CIDADE = " + cLst[0] + " where F.cod_cidade =  " + cLst[z], dbTrans);
                        D.Bd.ExecuteNonQuery("update lojA f set f.COD_CIDADE
= " + cLst[0] + "  where F.cod_cidade =  " + cLst[z], dbTrans);
                        D.Bd.ExecuteNonQuery("DELETE FROM CIDADE where
CODIGO =" + cLst[z], dbTrans);
                        dbTrans.Commit();
                    }
                }
            }
            MessageBox.Show("Cidades normalizadas e remanejadas :) !!!");
            D.Bd.ExecuteNonQuery(@"CREATE UNIQUE INDEX IDX_CIDADE_DESCRICAO
                                    ON CIDADE (DESCRICAO)");
            MessageBox.Show("Indíce único criado para não permitir
descrições repetidas :) !!!");
        }



Mais detalhes sobre a lista de discussão lista