Jump to content

Recommended Posts

Posted

Boa tarde!

Queria saber se algum de vocês, após a realização de uma aplicação, teve de fazer um motor de migração para que fosse possivel utilizar a mesma aplicação noutra base de dados. Ou seja, popular uma bd com dados de uma pré existente e como o fizeram. Estou um bocado às escuras neste assunto e preciso de encontrar a luz...

Cumprimentos e desde já obrigado!

Posted

Mudas o motor da BD? Qual estás a usar e qual o novo, caso mudes?

Não estou a usar nenhum ainda.

A questão é que tenho de ir buscar os dados antigos para popular a nova BD.

Os dados antigos estão em ficheiros .dbf que, através de uns softwares que encontrei por aí, consigo extrair para .xls e importar para sql server.

A questão é que preciso de criar um motor que faça isto. para já não estou a usar nenhum. Eu acho que ainda nem percebi bem o que é um motor de migração :\

Posted

Isso normalmente significa definir uma aplicação que executa queries para ir buscar os dados à BD antiga, aplica as transformações necessárias aos dados, e coloca os dados na nova BD. Convém teres em atenção dependências relacionadas com chaves estrangeiras quando definires a ordem de execução das queries. Convém também ter um mecanismo para detectar que dados já foram migrados (se a BD for grande, é conveniente dividir as queries em blocos, e há sempre a possibilidade de teres que interromper a migração e teres que começar).

EDIT: se os dados vêem de um XLS, convém teres uma API que te permita fazer queries sobre os dados.

Posted

Isso normalmente significa definir uma aplicação que executa queries para ir buscar os dados à BD antiga, aplica as transformações necessárias aos dados, e coloca os dados na nova BD. Convém teres em atenção dependências relacionadas com chaves estrangeiras quando definires a ordem de execução das queries. Convém também ter um mecanismo para detectar que dados já foram migrados (se a BD for grande, é conveniente dividir as queries em blocos, e há sempre a possibilidade de teres que interromper a migração e teres que começar).

EDIT: se os dados vêem de um XLS, convém teres uma API que te permita fazer queries sobre os dados.

Sim, pelo que entendi é exatamente isso. A aplicação tem de ser estritamente feita em sql ou c#? Não sabe se existem alguns exemplos dessas apps para que possa começar a pensar em como fazer no meu caso?

obrigado

Posted

O ideal será misturares SQL e C#.

Foi o que já comecei a fazer, só que não está fácil...

Tenho quase todos os campos em NVarchar e Float, e não os consigo transformar em varchar e int...

Posted

Vou começar hoje a tentar fazer algum código. A questão fundamental é mesmo essa, a conversão de tipos de dados. O que me está a fazer mais complicação é mesmo o conceito de motor de migração. Ou seja, eu agora consigo fazer as alterações que preciso através de SQL no MSSQL, alterando os tipos de dados da minha BD. As conversões principais são de nvarchar para varchar e semelhantes. Obrigado pela ajuda que já me deu, logo que tenha algo mais objetivo coloco aqui!

😄

Posted

Boas reznor,

e como é que estás a fazer exactamente a conversão?

A estrutura das bases de dados são as mesmas (mesmas tabelas, campos, chaves, etc) ?

Lês da base de dados original cada registo/campo e inseres na base de dados destino?

Ai há uns aninhos fiz um utilitário para converter de MySQL para MSSQL, e o que eu fazia era ler os dados do MySQL e gerava o script SQL compativel que executava depois na bd do MSSQL

Posted

Boas reznor,

e como é que estás a fazer exactamente a conversão?

A estrutura das bases de dados são as mesmas (mesmas tabelas, campos, chaves, etc) ?

Lês da base de dados original cada registo/campo e inseres na base de dados destino?

Ai há uns aninhos fiz um utilitário para converter de MySQL para MSSQL, e o que eu fazia era ler os dados do MySQL e gerava o script SQL compativel que executava depois na bd do MSSQL

Boas Nelson.

A base de dados que quero importar está no formato .dbf (ou seja, as tabelas). O que estou a fazer neste momento é usar um programa que passa todo o conteudo desses ficheiros dbf para uma base de dados em MSSQL. Ao acontecer isto perdem-se as relações e chaves, apenas se mantendo os campos.

O problema principal é que a base de dados antiga está mal feita, não contém nenhuma descrição do que significam os campos, e nos nomes das colunas aparecem coisa do genero "z001s", "drn" ou "drf" o que torna tudo muito mais complicado.

Posted

A coisa acho que está ela por ela. Estou agora a fazer de outra forma. Exporto para um xls para conseguir detalhar as colunas e perceber o sentido e depois importo para sql. Ao fazer isto consigo converter sem problemas. Já está a andar. O proximo passo é criar o motor de migração que supostamente fará isto automaticamente...

Posted

Já vi mas não é bem isto.

O que eu preciso é de criar uma forma automática de pegar num *.dbf e através de um form em c# colocar a informação desse dbf numa tabela de destino SQL, só que nao faço a menor ideia de como pegar nisto e como isto se faz

Posted

O mais provavel é teres de usar uma biblioteca para ler dbfs.

Por exemplo esta (não testei)

http://fastdbf.codeplex.com/

Depois é leres os dados, tabela a tabela, registo a registo, campo a campo e inserires na bd MSSQL.

provavelmente sim. vou tentar também fazer uma especie de data reader de dbf para uma dgv e a partir daí tentar fazer insert dos dados na BD em SQL.

tou feito ao bife

Posted

Já vi mas não é bem isto.

O que eu preciso é de criar uma forma automática de pegar num *.dbf e através de um form em c# colocar a informação desse dbf numa tabela de destino SQL, só que nao faço a menor ideia de como pegar nisto e como isto se faz

DbProviderFactory f = DbProviderFactories.GetFactory("System.Data.OleDb");
DbConnection cn = f.CreateConnection();
cn.ConnectionString =
   "Provider=vfpoledb.1;Data Source=" + txtRutaDbf.Text +
   ";Collating Sequence=general;";
cn.Open();
foreach (FileInfo fInfo in lstTablas.SelectedItems)
{
   string archivo = fInfo.Name;
   string comando = "SELECT * FROM " + archivo;
   DbCommand cm = cn.CreateCommand();
   cm.CommandText = comando;
   try
   {
       dt.Load(cm.ExecuteReader());
   }
   catch (Exception)
   {
       //throw;
   }
}

Isto está no exemplo, na página do codeproject que te passei. Eu não testei mas parece-me a forma como o conteúdo do dbf é lido para um dataset. A partir deste momento, presumo que podes transformar e escrever o dataset na tua nova BD. Dei-te o link não pela ferramenta completa, mas pelo código que contém, e que te pode ajudar a fazeres o teu.

O exemplo do nelsonr também parece válido.

Posted

DbProviderFactory f = DbProviderFactories.GetFactory("System.Data.OleDb");
DbConnection cn = f.CreateConnection();
cn.ConnectionString =
"Provider=vfpoledb.1;Data Source=" + txtRutaDbf.Text +
";Collating Sequence=general;";
cn.Open();
foreach (FileInfo fInfo in lstTablas.SelectedItems)
{
string archivo = fInfo.Name;
string comando = "SELECT * FROM " + archivo;
DbCommand cm = cn.CreateCommand();
cm.CommandText = comando;
try
{
	dt.Load(cm.ExecuteReader());
}
catch (Exception)
{
	//throw;
}
}

Isto está no exemplo, na página do codeproject que te passei. Eu não testei mas parece-me a forma como o conteúdo do dbf é lido para um dataset. A partir deste momento, presumo que podes transformar e escrever o dataset na tua nova BD. Dei-te o link não pela ferramenta completa, mas pelo código que contém, e que te pode ajudar a fazeres o teu.

O exemplo do nelsonr também parece válido.

Sim sim, eu peguei no código e comecei a fazer o minha solução 😄 obrigado

Vou pegar nas vossas ajudas e tentar escrever a melhor solução possivel, é complicadito

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.