none
Salvar dados na tabela pelo codigo C# em Asp.Net RRS feed

  • Pergunta

  • Como salvar os dados do meu codigo abaixo na tabela colaboradores ?

    string _strDIAMETRO = decimal.Parse(TextBoxDIAMETRO.Text).ToString("N2");

                    //VERIFICA A ESPESSURA NA TABELA BASE DE SCHESPESSURA

                    string _strSQL04 = "SELECT * FROM SCHESPESSURA WHERE SCHEDULE = '" + ComboboxSCHEDULE.Text + "' AND DIAMETRO = '" + _strDIAMETRO + "'";

                    SqlConnection con04 = new SqlConnection(_connectionString);

                    SqlCommand cmd04 = new SqlCommand(_strSQL04, con04);

                    cmd04.CommandType = CommandType.Text;

                    While (con04)

                    {

                        con04.Open();

                        SqlDataReader dr04 = cmd04.ExecuteReader();

                        if (dr04.Read())

                        {

                            //Aqui eu vou salvar meus dados na tabela COLOCABORADORES

                            //abaixo segue os campos que serão salvos Update na tabela

                            //Colaboradores.              

                            CAMPO1 = dr04["CAMPO1"].ToString();

                            CAMPO2 = dr04["CAMPO2"].ToString();

                            CAMPO3 = dr04["CAMPO3"].ToString();

                            CAMPO4 = dr04["CAMPO4"].ToString();

                            //Aqui eu salvo o 1 registro na tabela colaboradores. 

                        }

                        dr04.Close();

                        con04.Close();

                    }

    segunda-feira, 1 de julho de 2013 12:05

Respostas

  • Paulo, você precisa excluir todos os registros antes de inserir sempre que executar o código?

    Segue o código ajustado:

                string _connectionProtheus = WebConfigurationManager.ConnectionStrings["CONNECTIONPROTHEUS"].ConnectionString;
                //Cria a conexão com o banco de dados do SGO para Inserir Registros
                string _connectionString = WebConfigurationManager.ConnectionStrings["CONNECTIONSTRING"].ConnectionString;
                SqlConnection connection = new SqlConnection(_connectionString);
                connection.Open();
                //Seleciona todos os registros da tabela de funções do Protheus
                string _strSQL04 = "SELECT * FROM SRJ010 ORDER BY RJ_FUNCAO";
                SqlConnection con04 = new SqlConnection(_connectionProtheus);
                SqlCommand cmd04 = new SqlCommand(_strSQL04, con04);
                cmd04.CommandType = CommandType.Text;
                using (con04)
                {
                    con04.Open();
                    SqlDataReader dr04 = cmd04.ExecuteReader();
    
                    //apaga TODOS registros da tabela FUNCAO antes de começar a inserir nela
                    SqlCommand deletar = new SqlCommand("DELETE FROM FUNCAO");
                    deletar.Connection = connection;
                    deletar.ExecuteNonQuery();
    
                    while (dr04.Read())
                    {
                        DataSet data = new DataSet();
                        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM FUNCAO", connection);
                        adapter.Fill(data, "FUNCAO");
                        string SQL = "INSERT INTO FUNCAO (CODIGO,DESCRICAO) VALUES (@CODIGO,@DESCRICAO)";
                        adapter.InsertCommand = new SqlCommand(SQL, connection);
    
                        //Aqui vou adicinar o valor e o parametro ao comando
                        //é preciso informar o tamanho da coluna no banco
                        //e o nome dessa coluna no banco
                        SqlParameter sqlCODIGO = adapter.InsertCommand.Parameters.Add("@CODIGO", SqlDbType.NVarChar, 5, "CODIGO");
                        SqlParameter sqlDESCRICAO = adapter.InsertCommand.Parameters.Add("@DESCRICAO", SqlDbType.NVarChar, 20, "DESCRICAO");
    
                        sqlCODIGO.Value = dr04["RJ_FUNCAO"];
                        sqlDESCRICAO.Value = dr04["RJ_DESC"];
                        adapter.InsertCommand.ExecuteNonQuery();
                        data.AcceptChanges();
    
    
                    }
    
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "myalert", "alert('Tabela de Funções Atualizada');", true);
    
                    dr04.Close();
                    dr04.Close();
                    connection.Close();
                }

    Se as respostas forem úteis, não esqueça de marcar como resposta ;)

    Abraço



    sexta-feira, 5 de julho de 2013 17:45

Todas as Respostas

  • Bom dia Paulo,

    Não sei se consegui pegar bem a tua dúvida, com base no teu código e precisando atualizar essas tuas informações tu teria que executar um UPDATE na tabela em cada iteração do DataReader ou então gerar os comandos SQL e executar após o final da leitura.

                    string _strDIAMETRO = decimal.Parse(TextBoxDIAMETRO.Text).ToString("N2");
                    //VERIFICA A ESPESSURA NA TABELA BASE DE SCHESPESSURA
                    string _strSQL04 = "SELECT * FROM SCHESPESSURA WHERE SCHEDULE = '" + ComboboxSCHEDULE.Text + "' AND DIAMETRO = '" + _strDIAMETRO + "'";
                    SqlConnection con04 = new SqlConnection(_connectionString);
                    SqlCommand cmd04 = new SqlCommand(_strSQL04, con04);
                    cmd04.CommandType = CommandType.Text;
                    While (con04)
                    {
                        con04.Open();
                        SqlDataReader dr04 = cmd04.ExecuteReader();
                        if (dr04.Read())
                        {
                            //Aqui eu vou salvar meus dados na tabela COLOCABORADORES
                            //abaixo segue os campos que serão salvos Update na tabela
                            //Colaboradores.              
                            CAMPO1 = dr04["CAMPO1"].ToString();
                            CAMPO2 = dr04["CAMPO2"].ToString();
                            CAMPO3 = dr04["CAMPO3"].ToString();
                            CAMPO4 = dr04["CAMPO4"].ToString();
                            //Aqui eu salvo o 1 registro na tabela colaboradores. 
                            String comando = String.Format("UPDATE COLABORADORES SET CAMPO1 = '{0}', CAMPO2 = '{1}', CAMPO3 = '{2}', CAMPO4 = '{3}' WHERE PARAMETRO = VALOR_PARAMETRO", CAMPO1, CAMPO2, CAMPO3,CAMPO4);
                            cmd04.CommandText = comando;
                            cmd04.ExecuteNonQuery();
                        }
                        dr04.Close();
                        con04.Close();
                    }

    O exemplo acima monta o SQL de UPDATE a cada volta do DataReader e executa o UPDATE.. 

    Obs.: no SQL, substitua "PARAMETRO" pela coluna que deseja usar como filtro no WHERE do teu UPDATE.. e "VALOR_PARAMETRO" com o valor da coluna.. exemplo: "WHERE ID = 1"
    segunda-feira, 1 de julho de 2013 12:25
  • Dessa forma não vai dar certo.

    Vou tentar colocar da forma que eu quero.

    if (dr04.Read())

                       {

                           Abre o RSSQL da tabela COLABORADORES

                                          RSSQL.Update           

                           RSSQL!CAMPO1 = dr04["CAMPO1"].ToString();

                           RSSQL!CAMPO2 = dr04["CAMPO2"].ToString();

                           RSSQL!CAMPO3 = dr04["CAMPO3"].ToString();

                           RSSQL!CAMPO4 = dr04["CAMPO4"].ToString();

                           RSSQL.Close 

                       }

    segunda-feira, 1 de julho de 2013 12:31
  • RSSQL seria um RecordSet? Enquando não for o fim:

    RSSQL.Edit
    RSSQL("CAMPO1").value = dr04["CAMPO1"].ToString();
    RSSQL.update


    segunda-feira, 1 de julho de 2013 12:44
  • Sim Recordset

    Mas eu preciso abrir a tabela colaboradores que esta dentro do mesmo banco acima então posso usar a mesma conexão.

    E depois salvar os dados do inicio ate o fim do registro da tabela que passei acima.

    Mas não sei como ficaria.

    Aguardo Retorno.

    Obrigado.

    segunda-feira, 1 de julho de 2013 12:53
  • Tente assim:

    'carrega os dados da tabela fornecedores para o recordset
    RSSQL.Open("select * from fornecedores", con04)
    
    'enquanto nao for o fim do recordset, atualiza os registros
    Do Until RSSQL.EOF
       RSSQL.Edit
       RSSQL("CAMPO1").Value = dr04["CAMPO1"].ToString();
       RSSQL("CAMPO2").Value = dr04["CAMPO2"].ToString();
       RSSQL("CAMPO3").Value = dr04["CAMPO3"].ToString();
       RSSQL("CAMPO4").Value = dr04["CAMPO4"].ToString();
       RSSQL.Update
    Loop
    
    'fecha a conexao após atualizar todos registros
    RSSQL.close()

    No código acima tu carrega a tabela pro recordset e depois percorre ele atualizando os registros.

    Abraço!



    segunda-feira, 1 de julho de 2013 13:17
  • So 2 coisas que não entendi.

    1) Antes do RSSQL.Open não tem nenhuma linha de codigo ?

    2) RSSQL.Edit ? Edit não seria para editar um registro existente ?

    Desculpe minhas duvidas mas é a 1 vez que faço essse procedimento na minha pagina.

    Aguardo Retorno.

    Obrigado.

    segunda-feira, 1 de julho de 2013 14:07
  • 1) Tu vai abrir teu RecordSet dentro do teu while e para cada item tu vai fazer a atualização dos registros do teu RecordSet (me corrija se entendi errado tua regra), correto? Sendo assim, tu só precisa abrir o RecordSet.

    Obs.: Caso tu não tenha declarado ele ainda tu declara assim:

    Dim RSSQL As New ADODB.RecordSet()

    2) O Edit serve para armazenar em buffer as mudanças feitas no teu registro, depois que tu faz as alterações que tu precisa tu usa o Update e ele salva as modificações. :)

    Acontece algum erro quando tu tenta executar esse código? Ou tuas dúvidas são apenas de entendimento do que está escrito ali?

    Outra coisa, no título tu fala em "C# ASP.NET" mas estamos falando sobre RecordSet (que faz parte do VB), para qual tecnologia tu precisa de um solução? 


    segunda-feira, 1 de julho de 2013 14:30
  • A linguagem que estou usando e C# dentro de uma pagina.aspx

    Por isso falei Asp.Net

    Eu vou montar um exemplo do que eu estou querendo alexandre e assim fica melhor pra vc me ajudar.

    Lembrando que eu ja uso o codigo abaixo para pesquisa e salvar dados em um combobox ou textbox, mas nunca usei para salvar em uma tabela.

    string _strSQL04 = "SELECT * FROM TABELA1 WHERE CAMPO1 = '" + ComboboxCAMPO1.Text  + "'";
                   
    SqlConnection con04 = new SqlConnection(_connectionString);
                   
    SqlCommand cmd04 = new SqlCommand(_strSQL04, con04);
                    cmd04
    .CommandType = CommandType.Text;
                   
    While (con04)
                   
    {
                        con04
    .Open();
                       
    SqlDataReader dr04 = cmd04.ExecuteReader();
                       
    if (dr04.Read())
                       
    {
                           
    //Aqui eu vou salvar meus dados na  TABELA2
                            // Então aqui eu preciso abrir a tabela 2 e salvar os dados que vai passar nesse meu While da TABELA1
              
                            

                       
    }
                        dr04
    .Close();
                        con04
    .Close();
                   
    }

    segunda-feira, 1 de julho de 2013 14:59
  • Segue um exemplo comentado de como realizar o procedimento:

    string _strSQL04 = "SELECT * FROM TABELA1 WHERE CAMPO1 = '" + ComboboxCAMPO1.Text + "'"; SqlConnection con04 = new SqlConnection(_connectionString); SqlCommand cmd04 = new SqlCommand(_strSQL04, con04); cmd04.CommandType = CommandType.Text; con04.Open(); SqlDataReader dr04 = cmd04.ExecuteReader(); //se o SqlDataReader tiver registros if (dr04.HasRows) { //percorre todo o SqlDataReader while (dr04.Read()) { //para cada registro do teu SqlDataReader //cria um DataTable, neste objeto será onde você irá abrir a sua tabela, editar e salvar DataTable data = new DataTable(); //atribui o resultado de uma consulta ao SqlDataAdapter utilizando a conexão que você já possui, a con04 //aqui tu vai por o SQL que trás os registros da tabela FORNECEDORES, a tabela que tu quer editar SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM FORNECEDORES", con04); //preenche o DataTabel com os dados da tabela FORNECEDORES adapter.Fill(data); //para cada linha da tua tabela, atualiza os campos foreach (DataRow item in data.Rows) { item["CAMPO1"] = "VALOR CAMPO1"; item["CAMPO2"] = "VALOR CAMPO2"; item["CAMPO3"] = "VALOR CAMPO3"; item["CAMPO4"] = "VALOR CAMPO4"; } //salva as atualizações no banco de dados adapter.Update(data); }

    }

    dr04.Close();
    con04.Close();

    Qualquer dúvida estou a disposição.
    segunda-feira, 1 de julho de 2013 16:21
  • So tem um problema

    No codigo abaixo eu tenho que usar outro banco de dados

    //para cada registro do teu SqlDataReader
                       
    //cria um DataTable, neste objeto será onde você irá abrir a sua tabela, editar e salvar
                       
    DataTable data = new DataTable();

                       
    //atribui o resultado de uma consulta ao SqlDataAdapter utilizando a conexão que você já possui, a con04
                       
    //aqui tu vai por o SQL que trás os registros da tabela FORNECEDORES, a tabela que tu quer editar
                       
    SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM FORNECEDORES", con04);

                       
    //preenche o DataTabel com os dados da tabela FORNECEDORES
                        adapter
    .Fill(data);

                       
    //para cada linha da tua tabela, atualiza os campos
                       
    foreach (DataRow item in data.Rows)
                       
    {
                            item
    ["CAMPO1"] = "VALOR CAMPO1";
                            item
    ["CAMPO2"] = "VALOR CAMPO2";
                            item
    ["CAMPO3"] = "VALOR CAMPO3";
                            item
    ["CAMPO4"] = "VALOR CAMPO4";
                       
    }

                       
    //salva as atualizações no banco de dados
                        adapter
    .Update(data);

    Eu não posso usar a con04 pois esa tabela pertence a outro banco de dados conforme esta abaixo:

    string _connectionProtheus = WebConfigurationManager.ConnectionStrings["CONNECTIONPROTHEUS"].ConnectionString;

    Observe que eu estou manipulando 2 banco de dados. O 1 banco esta todo pronto conforme descrevi no 1 post. o que falta e abrir a segunda tabela que esta em outro banco de dados na string _connectionProtheus então não posso usar a con04 pois ela e do banco de dados 1.

    Então como fica ?

    Aguardo Retorno.

    Obrigado

    terça-feira, 2 de julho de 2013 16:05
  • Basta criar uma conexão nova. Você pode criar outro objeto do tipo SqlConnection para conectar ao segundo banco de dados.

    Fica dessa forma:

                string _strSQL04 = "SELECT * FROM TABELA1 WHERE CAMPO1 = '" + ComboboxCAMPO1.Text + "'";
                SqlConnection con04 = new SqlConnection(_connectionString);
    
                SqlCommand cmd04 = new SqlCommand(_strSQL04, con04);
                cmd04.CommandType = CommandType.Text;
    
                con04.Open();
                SqlDataReader dr04 = cmd04.ExecuteReader();
    
                String conexao = "aqui você insere sua string de conexão para o outro banco";
                SqlConnection connection = new SqlConnection(conexao);
                connection.Open();
    
                //se o SqlDataReader tiver registros 
                if (dr04.HasRows)
                {
                    //percorre todo o SqlDataReader
                    while (dr04.Read())
                    {
                        //para cada registro do teu SqlDataReader
                        //cria um DataTable, neste objeto será onde você irá abrir a sua tabela, editar e salvar
                        DataTable data = new DataTable();
    
                        //atribui o resultado de uma consulta ao SqlDataAdapter 
                        //aqui tu vai por o SQL que trás os registros da tabela FORNECEDORES, a tabela que tu quer editar
                        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM FORNECEDORES", connection);
    
                        //preenche o DataTabel com os dados da tabela FORNECEDORES
                        adapter.Fill(data);
    
                        //para cada linha da tua tabela, atualiza os campos
                        foreach (DataRow item in data.Rows)
                        {
                            item["CAMPO1"] = "VALOR CAMPO1";
                            item["CAMPO2"] = "VALOR CAMPO2";
                            item["CAMPO3"] = "VALOR CAMPO3";
                            item["CAMPO4"] = "VALOR CAMPO4";
                        }
    
                        //salva as atualizações no banco de dados
                        adapter.Update(data);
                    }
             }
             dr04.Close();
             con04.Close();
             connection.Close();
    Se a resposta for útil, não esqueça de marcar! ;)

    • Sugerido como Resposta Alexandre Rapaki terça-feira, 2 de julho de 2013 17:59
    terça-feira, 2 de julho de 2013 17:59
  • Alexandre

    Adaptei seu codigo ao meu porem não deu certo.

    Fui debugando meu codigo e na linha adapter.Update(data); da o erro que esta em amarelo logo abaixo:

    string _connectionProtheus = WebConfigurationManager.ConnectionStrings["CONNECTIONPROTHEUS"].ConnectionString;

                //Cria a conexão com o banco de dados do SGO para Inserir Registros

                string _connectionString = WebConfigurationManager.ConnectionStrings["CONNECTIONSTRING"].ConnectionString;

                SqlConnection connection = new SqlConnection(_connectionString);

                connection.Open();

                //Seleciona todos os registros da tabela de funções do Protheus

                string _strSQL04 = "SELECT * FROM SRJ010 ORDER BY RJ_FUNCAO";

                SqlConnection con04 = new SqlConnection(_connectionProtheus);

                SqlCommand cmd04 = new SqlCommand(_strSQL04, con04);

                cmd04.CommandType = CommandType.Text;

                using (con04)

                {

                    con04.Open();

                    SqlDataReader dr04 = cmd04.ExecuteReader();

                    while (dr04.Read())

                    {

                       

                        DataTable data = new DataTable();

                        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM FUNCAO",connection);

                        adapter.Fill(data);

                        foreach (DataRow ITEM in data.Rows)

                        {

                            ITEM["CODIGO"] = (string)dr04["RJ_FUNCAO"];

                            ITEM["DESCRICAO"] = (string)dr04["RJ_DESC"];

                        }

                        //InvalidOperationException was unhandled by user code

                        //Update requires a valid UpdateCommand when passed

                        //DataRow collection with modified rows

                        adapter.Update(data);

                    }

                    dr04.Close();

                    dr04.Close();

                    connection.Close();

                }

            }

    terça-feira, 2 de julho de 2013 19:15
  • Bom dia Paulo,

    Acabei esquecendo de mencionar um detalhe importante.. tu precisa informar o comando e os parâmetros para o UPDATE.

                string _connectionProtheus = WebConfigurationManager.ConnectionStrings["CONNECTIONPROTHEUS"].ConnectionString;
                //Cria a conexão com o banco de dados do SGO para Inserir Registros
                string _connectionString = WebConfigurationManager.ConnectionStrings["CONNECTIONSTRING"].ConnectionString;
                SqlConnection connection = new SqlConnection(_connectionString);
                connection.Open();
                //Seleciona todos os registros da tabela de funções do Protheus
                string _strSQL04 = "SELECT * FROM SRJ010 ORDER BY RJ_FUNCAO";
                SqlConnection con04 = new SqlConnection(_connectionProtheus);
                SqlCommand cmd04 = new SqlCommand(_strSQL04, con04);
                cmd04.CommandType = CommandType.Text;
                using (con04)
                {
                    con04.Open();
                    SqlDataReader dr04 = cmd04.ExecuteReader();
                    while (dr04.Read())
                    {
                       
                        DataTable data = new DataTable();
                        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM FUNCAO", connection);
                        adapter.Fill(data);
                        
                        //aqui você informa o comando de UPDATE com os campos que tu pretende atualizar
                        adapter.UpdateCommand = new SqlCommand("UPDATE FUNCAO SET CODIGO = @CODIGO, DESCRICAO = @DESCRICAO", connection);
                        
                        foreach (DataRow ITEM in data.Rows)
                        {
                            //aqui você irá adicionar o valor e o parâmetro ao comando
                            adapter.UpdateCommand.Parameters.Add("@CODIGO", SqlDbType.NVarChar).Value = dr04["RJ_FUNCAO"];
                            adapter.UpdateCommand.Parameters.Add("@DESCRICAO", SqlDbType.NVarChar).Value = dr04["RJ_DESC"];
                        }
    
                        adapter.Update(data);
                    }
                    dr04.Close();
                    dr04.Close();
                    connection.Close();
                }
            }

    Obs.: no momento de adicionar os parâmetros ao comando verifique se o tipo que está sendo passado é o mesmo tipo da coluna no banco, o tipo deve ser o mesmo.

    Se a resposta for útil, não esqueça de marcar! ;)



    quarta-feira, 3 de julho de 2013 11:41
  • Alexandre

    Eu coloquei da forma que você postou.

    Agora não da erro algum, passa por todos os comandos porem a tabela FUNCAO ainda fica em branco.

    Não grana nem 1 registro. fica vazia.

    string _connectionProtheus = WebConfigurationManager.ConnectionStrings["CONNECTIONPROTHEUS"].ConnectionString;

                //Cria a conexão com o banco de dados do SGO para Inserir Registros
                string _connectionString = WebConfigurationManager.ConnectionStrings["CONNECTIONSTRING"].ConnectionString;
                SqlConnection connection = new SqlConnection(_connectionString);
                connection.Open();

                //Seleciona todos os registros da tabela de funções do Protheus
                string _strSQL04 = "SELECT * FROM SRJ010 ORDER BY RJ_FUNCAO";
                SqlConnection con04 = new SqlConnection(_connectionProtheus);
                SqlCommand cmd04 = new SqlCommand(_strSQL04, con04);
                cmd04.CommandType = CommandType.Text;
                using (con04)
                {
                    con04.Open();
                    SqlDataReader dr04 = cmd04.ExecuteReader();
                    while (dr04.Read())
                    {
                       
                        DataTable data = new DataTable();
                        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM FUNCAO",connection);
                        adapter.Fill(data);

                        //Aqui eu informo o comando de UPDATE com os campos que eu pretendo atualizar
                        adapter.UpdateCommand = new SqlCommand("UPDATE FUNCAO SET CODIGO = @CODIGO, DESCRICAO = @DESCRICAO", connection);

                        foreach (DataRow ITEM in data.Rows)
                        {
                            //Aqui vou adicionar o valor e o parametro ao comando
                            adapter.UpdateCommand.Parameters.Add("@CODIGO", SqlDbType.NVarChar).Value = dr04["RJ_FUNCAO"];
                            adapter.UpdateCommand.Parameters.Add("@DESCRICAO", SqlDbType.NVarChar).Value = dr04["RJ_DESC"];
                           
                        }
                       
                        adapter.Update(data);

                        //Alerta de Conclusão
                        ScriptManager.RegisterClientScriptBlock(this, GetType(), "myalert", "alert('Tabela de Funções Atualizada');", true);
                    }
                    dr04.Close();
                    dr04.Close();
                    connection.Close();

    quarta-feira, 3 de julho de 2013 20:14
  • Olá Paulo,

    Fiz alguns ajustes no código, agora está funcionando (comentei algumas das mudanças). 

                string _connectionProtheus = WebConfigurationManager.ConnectionStrings["CONNECTIONPROTHEUS"].ConnectionString;
    
                //Cria a conexão com o banco de dados do SGO para Inserir Registros
                string _connectionString = WebConfigurationManager.ConnectionStrings["CONNECTIONSTRING"].ConnectionString;
                SqlConnection connection = new SqlConnection(_connectionString);
                connection.Open();
    
                //Seleciona todos os registros da tabela de funções do Protheus
                string _strSQL04 = "SELECT * FROM SRJ010 ORDER BY RJ_FUNCAO";
                SqlConnection con04 = new SqlConnection(_connectionProtheus);
                SqlCommand cmd04 = new SqlCommand(_strSQL04, con04);
                cmd04.CommandType = CommandType.Text;
                using (con04)
                {
                    con04.Open();
                    SqlDataReader dr04 = cmd04.ExecuteReader();
                    while (dr04.Read())
                    {
    
                        DataSet data = new DataSet();
                        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM FUNCAO", connection);
                        adapter.Fill(data, "FUNCAO");
    
                        //Aqui eu informo o comando de UPDATE com os campos que eu pretendo atualizar                    
                        //adicionei o ID no where do comando
                        adapter.UpdateCommand = new SqlCommand("UPDATE FUNCAO SET CODIGO = @CODIGO, DESCRICAO = @DESCRICAO WHERE ID = @ID", connection);
                        
                        //Aqui vou adicionar o valor e o parametro ao comando                    
                        //agora quando definimos o parameter, é preciso informar o tamanho da coluna no banco                    
                        //e o nome dessa coluna no banco
                        SqlParameter sqlId = adapter.UpdateCommand.Parameters.Add("@ID", SqlDbType.Int, 4, "Id");
                        adapter.UpdateCommand.Parameters.Add("@CODIGO", SqlDbType.NVarChar, 100, "CODIGO");
                        adapter.UpdateCommand.Parameters.Add("@DESCRICAO", SqlDbType.NVarChar, 100, "DESCRICAO");
    
                        foreach (DataRow ITEM in data.Tables["FUNCAO"].Rows)
                        {                    
                            //informamos o ID do registro que será alterado
                            sqlId.Value = ITEM["ID"];
                            ITEM["CODIGO"] = dr04["RJ_FUNCAO"];
                            ITEM["DESCRICAO"] = dr04["RJ_DESC"];
    
                            adapter.Update(data, "FUNCAO");
                            data.AcceptChanges();
                        }
    
                        //Alerta de Conclusão
                        ScriptManager.RegisterClientScriptBlock(this, GetType(), "myalert", "alert('Tabela de Funções Atualizada');", true);
                    }
                    dr04.Close();
                    dr04.Close();
                    connection.Close();
                }

    Se a resposta for útil, não esqueça de marcar como resposta ;)

    Abraço


    quinta-feira, 4 de julho de 2013 13:19
  • Alexandre

    1) Eu não consigo ver o comando Where pois esta cortado acima.

    2) Por que tenho que colocar o Id ja que eu não tenho esse campo nas minhas 2 tabelas.

    3) Eu não quero alterar registros e sim adicionar registros na minha tabela FUNCAO que esta vazia.

    Aguardo seu retorno.

    Obrigado.

    quinta-feira, 4 de julho de 2013 17:30
  • Paulo,

    Para executar o insert ao invés de update, execute dessa forma:

    string _connectionProtheus = WebConfigurationManager.ConnectionStrings["CONNECTIONPROTHEUS"].ConnectionString; //Cria a conexão com o banco de dados do SGO para Inserir Registros string _connectionString = WebConfigurationManager.ConnectionStrings["CONNECTIONSTRING"].ConnectionString; SqlConnection connection = new SqlConnection(_connectionString); connection.Open(); //Seleciona todos os registros da tabela de funções do Protheus string _strSQL04 = "SELECT * FROM SRJ010 ORDER BY RJ_FUNCAO"; SqlConnection con04 = new SqlConnection(_connectionProtheus); SqlCommand cmd04 = new SqlCommand(_strSQL04, con04); cmd04.CommandType = CommandType.Text; using (con04) { con04.Open(); SqlDataReader dr04 = cmd04.ExecuteReader(); while (dr04.Read()) { DataSet data = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM FUNCAO", connection); adapter.Fill(data, "FUNCAO"); String sql = "INSERT INTO NOME_TABELA_DESTINO (CODIGO,DESCRICAO)

    VALUES (@CODIGO,@DESCRICAO)"; adapter.InsertCommand = new SqlCommand(sql, connection); //Aqui vou adicionar o valor e o parametro ao comando //é preciso informar o tamanho da coluna no banco //e o nome dessa coluna no banco SqlParameter sqlCodigo = adapter.InsertCommand.Parameters

    .Add("@CODIGO", SqlDbType.NVarChar, 100, "CODIGO"); SqlParameter sqlDescricao = adapter.InsertCommand.Parameters

    .Add("@DESCRICAO", SqlDbType.NVarChar, 100, "DESCRICAO"); foreach (DataRow ITEM in data.Tables["FUNCAO"].Rows) { sqlCodigo.Value = dr04["RJ_FUNCAO"]; sqlDescricao.Value = dr04["RJ_DESC"]; adapter.InsertCommand.ExecuteNonQuery(); data.AcceptChanges(); } //Alerta de Conclusão ScriptManager.RegisterClientScriptBlock(this, GetType(), "myalert", "alert('Tabela de Funções Atualizada');", true); } dr04.Close(); dr04.Close(); connection.Close(); }


    Se a resposta for útil, não esqueça de marcar como resposta ;)

    Abraço

    quinta-feira, 4 de julho de 2013 17:47
  • Alexandre

    Eu peguei seu codigo acima e so adaptei ao meu codigo algumas coisas.

    Quando rodei o codigo pela primeira vez ele ficou em loop e quando olhei a tabela de destino ela estava com varios registros duplicados e so aumentando sem parar. Tive que deletar a tabela de destino pois ja tinha mais 70.000 registros e so aumentando.

    Na segundo eu rodei o codigo passo a passo debugando so que ai eu percebi que ele não entra na parte em amarelo e não estava preenchendo a tabela.

    Eu então parei de debutar pois fiquei com medo de deixar rodar e acontecer a duplicação de novo e eu ter que fechar minha a aplicação.

    Segue meu codigo abaixo:

    string _connectionProtheus = WebConfigurationManager.ConnectionStrings["CONNECTIONPROTHEUS"].ConnectionString;

                //Cria a conexão com o banco de dados do SGO para Inserir Registros

                string _connectionString = WebConfigurationManager.ConnectionStrings["CONNECTIONSTRING"].ConnectionString;

                SqlConnection connection = new SqlConnection(_connectionString);

                connection.Open();

                //Seleciona todos os registros da tabela de funções do Protheus

                string _strSQL04 = "SELECT * FROM SRJ010 ORDER BY RJ_FUNCAO";

                SqlConnection con04 = new SqlConnection(_connectionProtheus);

                SqlCommand cmd04 = new SqlCommand(_strSQL04, con04);

                cmd04.CommandType = CommandType.Text;

                using (con04)

                {

                    con04.Open();

                    SqlDataReader dr04 = cmd04.ExecuteReader();

                    while (dr04.Read())

                    {

                        DataSet data = new DataSet();

                        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM FUNCAO", connection);

                        adapter.Fill(data, "FUNCAO");

                        string SQL = "INSERT INTO FUNCAO (CODIGO,DESCRICAO) VALUES (@CODIGO,@DESCRICAO)";

                        adapter.InsertCommand = new SqlCommand(SQL, connection);

                       

                        //Aqui vou adicinar o valor e o parametro ao comando

                        //é preciso informar o tamanho da coluna no banco

                        //e o nome dessa coluna no banco

                        SqlParameter sqlCODIGO = adapter.InsertCommand.Parameters.Add("@CODIGO", SqlDbType.NVarChar, 5, "CODIGO");

                        SqlParameter sqlDESCRICAO = adapter.InsertCommand.Parameters.Add("@DESCRICAO", SqlDbType.NVarChar, 20, "DESCRICAO");

                        foreach (DataRow ITEM in data.Tables["FUNCAO"].Rows)

                        {

                            sqlCODIGO.Value = dr04["RJ_FUNCAO"];

                            sqlDESCRICAO.Value = dr04["RJ_DESC"];

                            adapter.InsertCommand.ExecuteNonQuery();

                            data.AcceptChanges();

                        }

                        //Alerta de Conclusão

                        ScriptManager.RegisterClientScriptBlock(this, GetType(), "myalert", "alert('Tabela de Funções Atualizada');", true);

                    }

                    dr04.Close();

                    dr04.Close();

                    connection.Close();

                }

    sexta-feira, 5 de julho de 2013 12:47
  • Esqueci de colocar

    Debugando não entra nessa parte

    sqlCODIGO.Value = dr04["RJ_FUNCAO"];

                            sqlDESCRICAO.Value = dr04["RJ_DESC"];

                            adapter.InsertCommand.ExecuteNonQuery();

                            data.AcceptChanges();

    sexta-feira, 5 de julho de 2013 12:49
  • Bom dia Paulo,

    Como no início eu tinha entendido errado tua regra e achei que tu fosse atualizar todos registros (UPDATE), coloquei o foreach. Agora como tu só precisa inserir o registro não precisamos mais do foreach, esqueci de ajustar quando removi a lógica para UPDATE e adicione a de INSERT.

    Tente dessa forma:

                string _connectionProtheus = WebConfigurationManager.ConnectionStrings["CONNECTIONPROTHEUS"].ConnectionString;
                //Cria a conexão com o banco de dados do SGO para Inserir Registros
                string _connectionString = WebConfigurationManager.ConnectionStrings["CONNECTIONSTRING"].ConnectionString;
                SqlConnection connection = new SqlConnection(_connectionString);
                connection.Open();
                //Seleciona todos os registros da tabela de funções do Protheus
                string _strSQL04 = "SELECT * FROM SRJ010 ORDER BY RJ_FUNCAO";
                SqlConnection con04 = new SqlConnection(_connectionProtheus);
                SqlCommand cmd04 = new SqlCommand(_strSQL04, con04);
                cmd04.CommandType = CommandType.Text;
                using (con04)
                {
                    con04.Open();
                    SqlDataReader dr04 = cmd04.ExecuteReader();
                    while (dr04.Read())
                    {
                        DataSet data = new DataSet();
                        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM FUNCAO", connection);
                        adapter.Fill(data, "FUNCAO");
                        string SQL = "INSERT INTO FUNCAO (CODIGO,DESCRICAO) VALUES (@CODIGO,@DESCRICAO)";
                        adapter.InsertCommand = new SqlCommand(SQL, connection);
                       
                        //Aqui vou adicinar o valor e o parametro ao comando
                        //é preciso informar o tamanho da coluna no banco
                        //e o nome dessa coluna no banco
                        SqlParameter sqlCODIGO = adapter.InsertCommand.Parameters.Add("@CODIGO", SqlDbType.NVarChar, 5, "CODIGO");
                        SqlParameter sqlDESCRICAO = adapter.InsertCommand.Parameters.Add("@DESCRICAO", SqlDbType.NVarChar, 20, "DESCRICAO");
                        
                            sqlCODIGO.Value = dr04["RJ_FUNCAO"];
                            sqlDESCRICAO.Value = dr04["RJ_DESC"];
                            adapter.InsertCommand.ExecuteNonQuery();
                            data.AcceptChanges();
    
                        
                    }
    
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "myalert", "alert('Tabela de Funções Atualizada');", true);
    
                    dr04.Close();
                    dr04.Close();
                    connection.Close();
                }

    Se a resposta for útil, não esqueça de marcar como resposta ;)

    Abraço

    sexta-feira, 5 de julho de 2013 13:20
  • Alexandre

    Agora esta funcinando. Esta pegando todos os registros certinhos.

    So esqueci de citar algo.

    Eu preciso apagar os registros da tabela FUNCAO antes de inserir os registros nela.

    Então como ficaria meu codigo acima ?

    Fico no aguardo.

    Obrigado.

    sexta-feira, 5 de julho de 2013 17:10
  • Paulo, você precisa excluir todos os registros antes de inserir sempre que executar o código?

    Segue o código ajustado:

                string _connectionProtheus = WebConfigurationManager.ConnectionStrings["CONNECTIONPROTHEUS"].ConnectionString;
                //Cria a conexão com o banco de dados do SGO para Inserir Registros
                string _connectionString = WebConfigurationManager.ConnectionStrings["CONNECTIONSTRING"].ConnectionString;
                SqlConnection connection = new SqlConnection(_connectionString);
                connection.Open();
                //Seleciona todos os registros da tabela de funções do Protheus
                string _strSQL04 = "SELECT * FROM SRJ010 ORDER BY RJ_FUNCAO";
                SqlConnection con04 = new SqlConnection(_connectionProtheus);
                SqlCommand cmd04 = new SqlCommand(_strSQL04, con04);
                cmd04.CommandType = CommandType.Text;
                using (con04)
                {
                    con04.Open();
                    SqlDataReader dr04 = cmd04.ExecuteReader();
    
                    //apaga TODOS registros da tabela FUNCAO antes de começar a inserir nela
                    SqlCommand deletar = new SqlCommand("DELETE FROM FUNCAO");
                    deletar.Connection = connection;
                    deletar.ExecuteNonQuery();
    
                    while (dr04.Read())
                    {
                        DataSet data = new DataSet();
                        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM FUNCAO", connection);
                        adapter.Fill(data, "FUNCAO");
                        string SQL = "INSERT INTO FUNCAO (CODIGO,DESCRICAO) VALUES (@CODIGO,@DESCRICAO)";
                        adapter.InsertCommand = new SqlCommand(SQL, connection);
    
                        //Aqui vou adicinar o valor e o parametro ao comando
                        //é preciso informar o tamanho da coluna no banco
                        //e o nome dessa coluna no banco
                        SqlParameter sqlCODIGO = adapter.InsertCommand.Parameters.Add("@CODIGO", SqlDbType.NVarChar, 5, "CODIGO");
                        SqlParameter sqlDESCRICAO = adapter.InsertCommand.Parameters.Add("@DESCRICAO", SqlDbType.NVarChar, 20, "DESCRICAO");
    
                        sqlCODIGO.Value = dr04["RJ_FUNCAO"];
                        sqlDESCRICAO.Value = dr04["RJ_DESC"];
                        adapter.InsertCommand.ExecuteNonQuery();
                        data.AcceptChanges();
    
    
                    }
    
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "myalert", "alert('Tabela de Funções Atualizada');", true);
    
                    dr04.Close();
                    dr04.Close();
                    connection.Close();
                }

    Se as respostas forem úteis, não esqueça de marcar como resposta ;)

    Abraço



    sexta-feira, 5 de julho de 2013 17:45
  • Valeu Alexandre

    Agora ficou show de bola.

    Ja marquei como resposta.

    Muito Obrigado.

    quarta-feira, 10 de julho de 2013 13:40