reznor Posted February 25, 2014 at 01:09 PM Report #546570 Posted February 25, 2014 at 01:09 PM 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!
Flinger Posted February 25, 2014 at 02:23 PM Report #546578 Posted February 25, 2014 at 02:23 PM Mudas o motor da BD? Qual estás a usar e qual o novo, caso mudes?
reznor Posted February 25, 2014 at 02:54 PM Author Report #546592 Posted February 25, 2014 at 02:54 PM 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 :\
Rui Carlos Posted February 25, 2014 at 03:24 PM Report #546598 Posted February 25, 2014 at 03:24 PM 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. Rui Carlos Gonçalves
reznor Posted February 26, 2014 at 09:40 AM Author Report #546690 Posted February 26, 2014 at 09:40 AM 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
Rui Carlos Posted February 26, 2014 at 10:32 AM Report #546700 Posted February 26, 2014 at 10:32 AM O ideal será misturares SQL e C#. Rui Carlos Gonçalves
reznor Posted February 26, 2014 at 10:50 AM Author Report #546702 Posted February 26, 2014 at 10:50 AM 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...
Rui Carlos Posted February 26, 2014 at 04:24 PM Report #546739 Posted February 26, 2014 at 04:24 PM Se mostrares um excerto de código, pode ser que alguém te consiga ajudar. Pessoalmente, não tenho grande experiência com as tecnologias que estás a usar, mas posso tentar dar uma ajuda. Assumo que precises essencialmente de converter variáveis, através de castings ou assim. Rui Carlos Gonçalves
reznor Posted February 27, 2014 at 09:23 AM Author Report #546817 Posted February 27, 2014 at 09:23 AM 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! 😄
nelsonr Posted February 27, 2014 at 09:32 AM Report #546818 Posted February 27, 2014 at 09:32 AM 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
reznor Posted February 27, 2014 at 09:38 AM Author Report #546819 Posted February 27, 2014 at 09:38 AM 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.
nelsonr Posted February 27, 2014 at 09:48 AM Report #546823 Posted February 27, 2014 at 09:48 AM Ah ok, então o problema que estás a ter é de perceber o que são os dados e não a conversão propriamente dita?
reznor Posted February 27, 2014 at 10:01 AM Author Report #546825 Posted February 27, 2014 at 10:01 AM 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...
Flinger Posted February 27, 2014 at 10:19 AM Report #546828 Posted February 27, 2014 at 10:19 AM Não sei se funciona, mas encontrei um artigo que pode ser interessante para ti: http://www.codeproject.com/Articles/20170/DBF2DataSet Vale apena dares uma vista de olhos, pois pode-te guiar para uma solução automatizada.
reznor Posted February 27, 2014 at 10:49 AM Author Report #546837 Posted February 27, 2014 at 10:49 AM Não sei se funciona, mas encontrei um artigo que pode ser interessante para ti: http://www.codeproject.com/Articles/20170/DBF2DataSet Vale apena dares uma vista de olhos, pois pode-te guiar para uma solução automatizada. Obrigadão! Vou checkar!
reznor Posted February 28, 2014 at 09:59 AM Author Report #547040 Posted February 28, 2014 at 09:59 AM 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
nelsonr Posted February 28, 2014 at 10:19 AM Report #547044 Posted February 28, 2014 at 10:19 AM 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.
reznor Posted February 28, 2014 at 11:45 AM Author Report #547085 Posted February 28, 2014 at 11:45 AM 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
Flinger Posted February 28, 2014 at 11:46 AM Report #547086 Posted February 28, 2014 at 11:46 AM 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.
reznor Posted February 28, 2014 at 11:56 AM Author Report #547094 Posted February 28, 2014 at 11:56 AM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now