Usuário com melhor resposta
Copiar certos dados de uma tabela e jogar para outra e em outro banco de dados

Pergunta
-
Respostas
-
amigo algumas maneiras
idéia é você fazer um select, salvar em 1 data table,
e do datatable executar os insert para a outra tabela...
2 - procura uma ferramenta no seu banco de dados para você extrair os insert into ( ou o backup ) da tabela e importar para o segundo bd..
Espero ajudar
Abraços !
Att, Afonso Fernandes.
- Sugerido como Resposta Pablo Batista Cardoso quinta-feira, 14 de março de 2013 18:30
- Marcado como Resposta Levi DomingosModerator sábado, 23 de março de 2013 19:46
-
Cara,
Para acessarmos outra tabela de outro banco utilizamos a seguinte sintaxe:
MeuBanco..MinhaTabela
Você pode fazer um insert comum na sua tabela X pegando de uma tabela Y em outro banco.
Exemplo:
INSERT INTO TABELA(ID, NOME, ENDERECO) SELECT ID, NOME, ENDERECO FROM MEUBANCO2..MINHATABELA WHERE ..
Atenciosamente, Samuel dos Anjos
- Sugerido como Resposta Samuel Rodrigues dos Anjos quinta-feira, 14 de março de 2013 18:36
- Marcado como Resposta Levi DomingosModerator sábado, 23 de março de 2013 19:46
-
Cara,
Para o seu caso é melhor utilizar o que o Levi recomendou "SqlBulkCopy":
http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy
http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlbulkcopy.aspx
http://www.macoratti.net/vbn5_bkc.htm
Atenciosamente, Samuel dos Anjos
- Sugerido como Resposta Samuel Rodrigues dos Anjos segunda-feira, 1 de abril de 2013 23:07
- Marcado como Resposta Dionathan Batista quinta-feira, 4 de abril de 2013 19:49
-
Cara,
Da uma olhada nesse exemplo:
Atenciosamente, Samuel dos Anjos
- Sugerido como Resposta Samuel Rodrigues dos Anjos terça-feira, 2 de abril de 2013 18:30
- Marcado como Resposta Dionathan Batista quinta-feira, 4 de abril de 2013 19:48
Todas as Respostas
-
amigo algumas maneiras
idéia é você fazer um select, salvar em 1 data table,
e do datatable executar os insert para a outra tabela...
2 - procura uma ferramenta no seu banco de dados para você extrair os insert into ( ou o backup ) da tabela e importar para o segundo bd..
Espero ajudar
Abraços !
Att, Afonso Fernandes.
- Sugerido como Resposta Pablo Batista Cardoso quinta-feira, 14 de março de 2013 18:30
- Marcado como Resposta Levi DomingosModerator sábado, 23 de março de 2013 19:46
-
Cara,
Para acessarmos outra tabela de outro banco utilizamos a seguinte sintaxe:
MeuBanco..MinhaTabela
Você pode fazer um insert comum na sua tabela X pegando de uma tabela Y em outro banco.
Exemplo:
INSERT INTO TABELA(ID, NOME, ENDERECO) SELECT ID, NOME, ENDERECO FROM MEUBANCO2..MINHATABELA WHERE ..
Atenciosamente, Samuel dos Anjos
- Sugerido como Resposta Samuel Rodrigues dos Anjos quinta-feira, 14 de março de 2013 18:36
- Marcado como Resposta Levi DomingosModerator sábado, 23 de março de 2013 19:46
-
a forma correcta seria usando este class : SqlBulkCopy Class
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx
A flower cannot blossom without sunshine, and man cannot live without love.
- Sugerido como Resposta Samuel Rodrigues dos Anjos quinta-feira, 21 de março de 2013 16:15
-
Pessoal,
Não creio que exista a forma mais correta ou não, mas sim as melhores práticas para se aproveitar tanto a parte de banco quanto a de programação.
Como o Levi informou, via programação para aproveitar mais do framework a melhor pratica é o uso do SqlBulkCopy.
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx
Porém se for direto no banco, uma das praticas utilizadas é a que postei acima também.
INSERT INTO TABELA(ID, NOME, ENDERECO) SELECT ID, NOME, ENDERECO FROM MEUBANCO2..MINHATABELA WHERE ..
Atenciosamente, Samuel dos Anjos
- Sugerido como Resposta Samuel Rodrigues dos Anjos quinta-feira, 21 de março de 2013 16:19
-
@Samuel Dos Anjos
Nao foi minha intencao ignorar seu posto. Peco desculpa se o fiz.
Tens trabalhado muito pra comunidade, gosto dos teus threads. A tua sugestao esta correcta tambem.
Continua com o teu trabalho.
A flower cannot blossom without sunshine, and man cannot live without love.
-
Levi,
Claro que não houve nenhum desentendimento da minha parte, apenas queria deixar algumas outras formas das praticas que podemos utilizar para tal procedimento.
Não se preocupe meu caro, estamos juntos tentando melhorar a qualidade do fórum sem dúvidas. Porém ainda estou longe de muitos conhecimentos que possui. Mas não deixarei de aprender sobre o que fazemos nessa área.
Bora pra frente...
Atenciosamente, Samuel dos Anjos
-
Obrigado Samuel dos Anjos
Estou estudando c# e tenho esse desafio para fazer porem ainda naum entendi muito bem
Olha o que preciso
---------------------------------------------------------------------------------------------------------------------
No Banco 1 tenho a Tabela 1 com os seguintes campos
Codigo Nome Cpf Endereco Numero Bairro Cidade Estado Cep ObsNo Banco 2 tenho a Tabela 2 Com os seguintes campos
Codigo Nome Cpf Endereco Bairro Cidade Estado Cep Telefone Email------------------------------------------------------------------------------------------------------------------------
Preciso copiar os dados do banco 1 e joga-los no banco 2 porem eles não estão na mesma ordem
Estou nesse dilema
Se puder me ajudar agradeço
-
Cara,
Se você não for utilizar o método que o Levi informou mas sim o que postei como outra opção, apenas faça isso:
INSERT INTO Banco2..TABELA2(Codigo, Nome, Endereco, Bairro, Cidade, Estado, Cep) SELECT Codigo, Nome, Endereco, Bairro, Cidade, Estado, Cep FROM Banco1..TABELA1 WHERE ..
Obs.
Se for copiar todos os dados, você não precisa da clausula Where conforme ai em cima.
Troque os nomes Banco1 e Banco2 pelos nomes dos bancos e Tabela1 e Tabela2 pelos nomes das tabelas.
Observe que eu defini a ordem dos dados que devem ser inseridos, você não precisa necessariamente preencher todos os dados a não ser que a tabela não aceite valores nulos.
Atenciosamente,
Samuel dos Anjos
- Sugerido como Resposta Samuel Rodrigues dos Anjos segunda-feira, 1 de abril de 2013 20:28
- Editado Samuel Rodrigues dos Anjos segunda-feira, 1 de abril de 2013 20:31
-
Nossa ta mais dificil do que eu pensei
ate agora so consegui a parte da conexao da uma olhada
private void bt_converter_clientes_Click(object sender, EventArgs e) { String EndBanco = tb_bd_origem.Text; String Usuario_origem = tb_usuario_origem.Text; String Senha_origem = tb_senha_origem.Text; String UserAndSenha = (Usuario_origem + Senha_origem); String EndBancoDestino = tb_bd_destino.Text; String Usuario_destino = tb_usuario_destino.Text; String Senha_destino = tb_senha_destino.Text; String BancoDados = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + EndBanco + ";User Id=" + Usuario_origem + ";Jet OLEDB:Database Password=" + Senha_origem; String BancoDadosDestino = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + EndBancoDestino + "; User Id=" + Usuario_destino + ";Jet OLEDB:Database Password=" + Senha_destino; //Iniciando Conexão //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- OleDbConnection ConectarOrigem = new OleDbConnection(BancoDados); OleDbConnection ConectarDestino = new OleDbConnection(BancoDadosDestino); try { ConectarOrigem.Open(); ConectarDestino.Open(); MessageBox.Show("Bancos conectados com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch { MessageBox.Show("Erro ao se conectar", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //Iniciando a Copia //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //Fechando a conexão //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- try { MessageBox.Show("Iniciando a desconecção", "Fechando as conexões", MessageBoxButtons.OK, MessageBoxIcon.Information); ConectarOrigem.Close(); ConectarDestino.Close(); MessageBox.Show("Bancos desconectados com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch { MessageBox.Show("Erro ao se desconectar", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- }
Não consegui fazer a parte em que copio os dados
:/
-
Cara,
Para o seu caso é melhor utilizar o que o Levi recomendou "SqlBulkCopy":
http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy
http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlbulkcopy.aspx
http://www.macoratti.net/vbn5_bkc.htm
Atenciosamente, Samuel dos Anjos
- Sugerido como Resposta Samuel Rodrigues dos Anjos segunda-feira, 1 de abril de 2013 23:07
- Marcado como Resposta Dionathan Batista quinta-feira, 4 de abril de 2013 19:49
-
Acho que devo estar fazendo algo errado pois da um erro
"Keyword not supported: 'provider'."
Segue o codigo que fiz
private void bt_converter_clientes_Click(object sender, EventArgs e) { String EndBanco = tb_bd_origem.Text; String Usuario_origem = tb_usuario_origem.Text; String Senha_origem = tb_senha_origem.Text; String UserAndSenha = (Usuario_origem + Senha_origem); String EndBancoDestino = tb_bd_destino.Text; String Usuario_destino = tb_usuario_destino.Text; String Senha_destino = tb_senha_destino.Text; String BancoDados = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + EndBanco + ";User Id=" + Usuario_origem + ";Jet OLEDB:Database Password=" + Senha_origem; String BancoDadosDestino = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + EndBancoDestino + "; User Id=" + Usuario_destino + ";Jet OLEDB:Database Password=" + Senha_destino; //String BancoDadosDestino = @"Driver={Microsoft Access Driver (*.mdb)}; Dbq= "+ EndBancoDestino + ";Exclusive=1; Uid=" + Usuario_destino + ";Pwd=" + Senha_destino; //Iniciando Conexão //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //Cria o datatable DataTable sourceData = new DataTable(); //criando as conexoes OleDbConnection ConectarOrigem = new OleDbConnection(BancoDados); OleDbConnection ConectarDestino = new OleDbConnection(BancoDadosDestino); //criando a instrucao do comando string instrucaoorigem = "SELECT numero FROM Clientes"; //criando o comando OleDbCommand sqlorigem = new OleDbCommand(instrucaoorigem,ConectarOrigem); //abre a conexao ConectarOrigem.Open(); //cria o datareader OleDbDataReader dr_origem = sqlorigem.ExecuteReader(); // dr_origem = sqlorigem.ExecuteReader(); //abrindo a conexao de destino ConectarDestino.Open(); //criando o bulkcopy SqlBulkCopy bdcopy = new SqlBulkCopy(ConectarDestino.ConnectionString); { bdcopy.ColumnMappings.Add("Codigo","Codigo"); bdcopy.ColumnMappings.Add("Nome", "Nome"); bdcopy.DestinationTableName = "Clientes"; bdcopy.WriteToServer(dr_origem); } dr_origem.Close(); }
O que eu fiz de errado??
-
Cara,
Da uma olhada nesse exemplo:
Atenciosamente, Samuel dos Anjos
- Sugerido como Resposta Samuel Rodrigues dos Anjos terça-feira, 2 de abril de 2013 18:30
- Marcado como Resposta Dionathan Batista quinta-feira, 4 de abril de 2013 19:48
-
Consegui fazer com um modelo q achei na internet porem ele so copia se as tabelas forem de colunas iguais, mais a minha os campos não estao na mesma posição , estou penando pra definir em qual coluna vai ser colada na tabela 2 ou seja na tabela vazia
esse é o que eu achei
using System; using System.Data; using System.Data.OleDb; using System.Windows.Forms; using System.Text; namespace Testes { class clsDados { //ESTOU USANDO OLEDB mas você pode adaptar para o que você estiver usando! public void Gravar() { //String de conexão : Adapte para a sua conexão! string conn = "Provider=ASAProv.90;Eng=TESTE01;Uid=DBA;Pwd=SQL; Links=tcpip(Host=localhost);"; //string do Comando SQL da tabela Cheia string strTabelaCheia = "SELECT * FROM TABELA1"; //string strTabelaCheia = "SELECT * FROM GES_044"; //string do Comando SQL da tabela Vazia string strTabelaVazia = "SELECT * FROM TABELA2"; //string strTabelaVazia = "SELECT * FROM GES_0044"; //Objeto Connection OleDbConnection conexao = new OleDbConnection(conn); //Tabela com todos os registros DataTable dtTabela1 = new DataTable(); //Tabela sem nenhum regitro DataTable dtTabela2 = new DataTable(); try { //Abre a conexão com o BD conexao.Open(); //Cria dois objeto DataAdapter passando por paramentro o comando SQL e a conexão aberta com o BD OleDbDataAdapter daTabelaCheia = new OleDbDataAdapter(strTabelaCheia, conexao); OleDbDataAdapter daTabelaVazia = new OleDbDataAdapter(strTabelaVazia, conexao); //Veja que não criei o comando de insert para a tabela vazia... //O CommandBuilder se encarrega de criar os comando para nós, basta passar um SELECT da tabela para o DataAdapter! OleDbCommandBuilder cbTabelaVazia = new OleDbCommandBuilder(daTabelaVazia); //Agora vamos preecher os DataTable com todos os registros das tabelas //Observe que mesmo que a tabela2 não tenha registro faço isto para mapear os campos da tabela. daTabelaCheia.Fill(dtTabela1); daTabelaVazia.Fill(dtTabela2); //Agora vamos percorrer todos os dados da TabelaCheia for (int i = 0; i < dtTabela1.Rows.Count; i++) { //Criaremos uma nova linha para ser adicionada na tabela vazia DataRow dr = dtTabela2.NewRow(); //Percorre todos os campos e adiciona os valores na row for (int j = 0; j < dtTabela1.Rows[i].ItemArray.Length; j++) { dr[j] = dtTabela1.Rows[i].ItemArray.GetValue(j); } //Efetiva a Gravação no DB dtTabela2.Rows.Add(dr); } //Assinamos o evento após a inclusão para ver se ocorreu erros daTabelaVazia.RowUpdated += new OleDbRowUpdatedEventHandler(daTabelaVazia_RowUpdated); //Executamos o método Update do DataTable para efetivar a gravação no BD daTabelaVazia.Update(dtTabela2); } catch (Exception ex) { throw ex; } finally { if(conexao.State != ConnectionState.Closed) conexao.Close(); } } //Médoto para executar quando o evento for disparado void daTabelaVazia_RowUpdated(object sender, OleDbRowUpdatedEventArgs e) { if (e.Status == UpdateStatus.ErrorsOccurred) { MessageBox.Show("ocorreu o seguinte erro: " + e.Errors.Message); e.Row.RowError = e.Errors.Message; e.Status = UpdateStatus.SkipCurrentRow; } } } }
-
Boa tarde.
Você pode transferir os dados utilizando SqlBulkCopy, utilizei algumas vezes e funcionou perfeitamente:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspxhttp://blogs.msdn.com/b/nikhilsi/archive/2008/06/11/bulk-insert-into-sql-from-c-app.aspx
http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy
Se a minha postagem ajudou, marque-a como resposta ou vote como útil.
-
Ola Rafael P. , tentei utilizar esse SqlBulkCopy, porem da um erro dizendo que o provedor não suporta
utilizo duas bases access e conexoes oledb
aparece esse erro
"Keyword not supported: 'provider'."
Ai vai a classe completa
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; using System.Data; using System.Configuration; using System.Data.SqlTypes; using System.Data.Sql; using System.Data.SqlClient; using System.Data; using System.Data.Odbc; namespace Conversor_Sat_Sistemas { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void bt_localizar_origem_Click(object sender, EventArgs e) { //define as propriedades do controle //OpenFileDialog this.abrir_bd_origem.Multiselect = false; this.abrir_bd_origem.Title = "Selecionar Banco de Origem"; abrir_bd_origem.InitialDirectory = @"C:\SAT"; //filtra para exibir somente arquivos de imagens abrir_bd_origem.Filter = "Banco de dados (*.mdb)|*.MDB|" + "All files (*.*)|*.*"; abrir_bd_origem.CheckFileExists = true; abrir_bd_origem.CheckPathExists = true; abrir_bd_origem.FilterIndex = 2; abrir_bd_origem.RestoreDirectory = true; abrir_bd_origem.ReadOnlyChecked = true; abrir_bd_origem.ShowReadOnly = true; DialogResult dr = this.abrir_bd_origem.ShowDialog(); if (dr == System.Windows.Forms.DialogResult.OK) { // Le os arquivos selecionados foreach (String arquivo in abrir_bd_origem.FileNames) { tb_bd_origem.Text += arquivo; } } } private void bt_localizar_destino_Click(object sender, EventArgs e) { //define as propriedades do controle //OpenFileDialog this.abrir_bd_destino.Multiselect = false; this.abrir_bd_destino.Title = "Selecionar Banco de Origem"; abrir_bd_destino.InitialDirectory = @"C:\SAT"; //filtra para exibir somente arquivos de imagens abrir_bd_destino.Filter = "Banco de dados (*.mdb)|*.MDB|" + "All files (*.*)|*.*"; abrir_bd_destino.CheckFileExists = true; abrir_bd_destino.CheckPathExists = true; abrir_bd_destino.FilterIndex = 2; abrir_bd_destino.RestoreDirectory = true; abrir_bd_destino.ReadOnlyChecked = true; abrir_bd_destino.ShowReadOnly = true; DialogResult dr = this.abrir_bd_destino.ShowDialog(); if (dr == System.Windows.Forms.DialogResult.OK) { // Le os arquivos selecionados foreach (String arquivo in abrir_bd_destino.FileNames) { tb_bd_destino.Text += arquivo; } } } private void bt_converter_clientes_Click(object sender, EventArgs e) { String EndBanco = tb_bd_origem.Text; String Usuario_origem = tb_usuario_origem.Text; String Senha_origem = tb_senha_origem.Text; String UserAndSenha = (Usuario_origem + Senha_origem); String EndBancoDestino = tb_bd_destino.Text; String Usuario_destino = tb_usuario_destino.Text; String Senha_destino = tb_senha_destino.Text; String BancoDados = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + EndBanco + ";User Id=" + Usuario_origem + ";Jet OLEDB:Database Password=" + Senha_origem; String BancoDadosDestino = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + EndBancoDestino + "; User Id=" + Usuario_destino + ";Jet OLEDB:Database Password=" + Senha_destino; //string destino = tb_bd_destino.Text; //String BancoDadosDestino = @"Driver={Microsoft Access Driver (*.mdb)}; Dbq= "+ EndBancoDestino + ";Exclusive=1; Uid=" + Usuario_destino + ";Pwd=" + Senha_destino; //Iniciando Conexão //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //Cria o datatable using (DataTable sourceData = new DataTable()) { } //criando as conexoes OleDbConnection ConectarOrigem = new OleDbConnection(BancoDados); OleDbConnection ConectarDestino = new OleDbConnection(BancoDadosDestino); // OdbcConnection ConectarDestino = new OdbcConnection(Destino); //criando a instrucao do comando string instrucaoorigem = "SELECT numero, nome FROM Clientes"; //criando o comando OleDbCommand sqlorigem = new OleDbCommand(instrucaoorigem,ConectarOrigem); //abre a conexao ConectarOrigem.Open(); //cria o datareader OleDbDataReader dr_origem = sqlorigem.ExecuteReader(); // dr_origem = sqlorigem.ExecuteReader(); //abrindo a conexao de destino ConectarDestino.Open(); //criando o bulkcopy SqlBulkCopy bdcopy = new SqlBulkCopy(ConectarDestino.ConnectionString); { bdcopy.ColumnMappings.Add("numero","Codigo"); bdcopy.ColumnMappings.Add("Nome", "Nome"); bdcopy.DestinationTableName = "Clientes"; bdcopy.WriteToServer(dr_origem); } dr_origem.Close(); } private void tb_bd_origem_TextChanged(object sender, EventArgs e) { } } }