[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