none
Conexão com Banco de Dados - Atribuição dos valores RRS feed

  • Pergunta

  • Boa tarde á todos, tenho uma dúvida que não estou conseguindo achar páginas que me ajudem com clareza! ;(

    Bom,

    Estou fazendo uma aplicação (Windows Form) (C#)

    Tenho já pronto um formulário que recebe os dados da pessoa para a criação de um currículo,

    existe o botão limpar(responsável por resetar todos os textBox, comboBox, e afins.)

    também existe o botão sair(responsável por sair da aplicação ;] )

    e por fim existe o botão CADASTRAR(responsável por fazer a validação e também pegar todos os dados depois de validados e adicionar ao banco de dados.

    Como os códigos para validação já estão todos prontos, só falta mesmo o envio dos dados para o banco de dados. E é ai que entra minha dúvida.

    - Como faço para que isso aconteça ?

    - Quais são os códigos que tenho que usar para conseguir mandar ao BD? (ACCESS)

    - Já fiz a conexão e no data source aparece todos os campos do jeitinho que criei no ACCESS, mais acontece que não sei mais o que fazer depois dai

    Meus Agradecimentos.

    terça-feira, 19 de maio de 2015 20:10

Respostas

  • Basicamente seria isso aqui:

    using System;
    using System.Windows.Forms;
    using System.Data.OleDb; 
    
    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                string connetionString = null;
                OleDbConnection cnn ;
                OleDbCommand cmd ;
                string sql = null;
    
    			connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=SEU_ARQUIVO_ACCESS;"
    			sql = "SEU SCRIPT DE INSERT AQUI"
    
                cnn = new OleDbConnection(connetionString);
                try
                {
                    cnn.Open();
                    MessageBox.Show("Conexao Aberta ");
                    cmd = new OleDbCommand(sql, cnn);
                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                    cnn.Close();
                    MessageBox.Show (" Comando executado!!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao abrir a conexao ! " + ex.ToString());
                }
            }
        }
    }

    Links:
    https://social.msdn.microsoft.com/Forums/pt-BR/c2508e2b-b177-4024-b6e5-61ab44c739cd/inserir-e-buscar-no-access-c?forum=vscsharppt


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    • Marcado como Resposta BrunoCastro quarta-feira, 20 de maio de 2015 18:51
    terça-feira, 19 de maio de 2015 20:21

Todas as Respostas

  • Basicamente seria isso aqui:

    using System;
    using System.Windows.Forms;
    using System.Data.OleDb; 
    
    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                string connetionString = null;
                OleDbConnection cnn ;
                OleDbCommand cmd ;
                string sql = null;
    
    			connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=SEU_ARQUIVO_ACCESS;"
    			sql = "SEU SCRIPT DE INSERT AQUI"
    
                cnn = new OleDbConnection(connetionString);
                try
                {
                    cnn.Open();
                    MessageBox.Show("Conexao Aberta ");
                    cmd = new OleDbCommand(sql, cnn);
                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                    cnn.Close();
                    MessageBox.Show (" Comando executado!!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao abrir a conexao ! " + ex.ToString());
                }
            }
        }
    }

    Links:
    https://social.msdn.microsoft.com/Forums/pt-BR/c2508e2b-b177-4024-b6e5-61ab44c739cd/inserir-e-buscar-no-access-c?forum=vscsharppt


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    • Marcado como Resposta BrunoCastro quarta-feira, 20 de maio de 2015 18:51
    terça-feira, 19 de maio de 2015 20:21
  • terça-feira, 19 de maio de 2015 20:41
  • Mr, não entendi muito bem o que você fez ai em cima..

    A minha dúvida é o seguinte.

    eu tenho vários e vários campos no form.

    exemplo: txtNome

    como faço para pegar o conteúdo escrito no txtNome e colocar dentro do banco de dados Access?

    quarta-feira, 20 de maio de 2015 11:56
  • Foi exatamente o que te passei, vou explicar em miudos:

    1 - Montar a query que fara o insert no banco de dados com os dados das sua textBox;
    2 - Passar os dados para essa query concatenando seus valores:
    Ex:
    "INSERT INTO (SEU_CAMPO1,SEU_CAMPO1...SEU_CAMPON)VALUES("+primeiraTextBox.Text+","+segundaTextBox.Text+","+NTextBox.Text+");"
    3 - Vai fazer o ExecuteNonQuery.


    No exemplo que te passei ja esta praticamente pronto, so coloca o script para o insert e os seus campos de acordo com o exemplo que te passei agora

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 20 de maio de 2015 12:05
  • Natan, até tento fazer o que está dizendo na página que você me recomendou.

    mas logo na primeira parte minha aplicação já me impede dizendo que "conexao" não existe, também tentei declarar "conexao", mais nada vai.

    quarta-feira, 20 de maio de 2015 12:08
  • onde está seu banco de dados?

    você conseguiu setar o caminho corretamente?


    Natan

    quarta-feira, 20 de maio de 2015 12:28
  • Mr., Muito obrigado ! você está me ajudando muito ! hehe, mais eu ainda tenho problemas ;[

    Quando clico no botão cadastrar, ele tenta fazer a conexão conforme você me ensinou, mais da um erro dizendo que o formato do banco de dados não é reconhecido. Como posso resolver isso ?

    meu BD está no formato .accdb

    quarta-feira, 20 de maio de 2015 13:47
  • rsrsr não entendi ou entendi errado, você não tem nada funcionando (consulta e nem conexão com o banco)?

    Para que funcione você terá que ter o ACE 4 DRIVER e sua string de conexão ficará assim:
    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=SEUBANCO.accdb;Jet OLEDB:Database"


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 20 de maio de 2015 13:53
  • Mr., meu caro. kk

    passei também pelo ultimo erro.

    Mas parece que ainda estou encontrando erros a seguir. Posso estar fazendo alguma coisa errada, e não estou enxergando isso.

    Vou colocar um pedaço do meu código de forma resumida.

    Mas antes de tudo, gostaria de agradecer imensamente sua ajuda, ela está sendo de grande valor.

     string connetionString = null;
                OleDbConnection conexao ;
                OleDbCommand comandos ;
                string sql = null;

                connetionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=jct-bancodedados.accdb;Jet OLEDB:Database";

                sql = "INSERT INTO(NOME,SOBRENOME)VALUES(" + txtNome.Text + "," +txtSobrenome+ ")";

                conexao = new OleDbConnection(connetionString);
                try
                {
                    conexao.Open();
                    MessageBox.Show("Conexao Aberta ");
                    comandos = new OleDbCommand(sql, conexao);
                    comandos.ExecuteNonQuery();
                    comandos.Dispose();
                    conexao.Close();
                    MessageBox.Show ("Comando executado!!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao abrir a conexao ! " + ex.ToString());
                }

    Ao compilar, este erro aparece:

    O formato da cadeia de inicialização não está de acordo com a especificação iniciada no índice 69.

    quarta-feira, 20 de maio de 2015 14:50
  • Posta a imagem onde aponta o erro, fica melhor para identificar

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 20 de maio de 2015 16:10
  • Minha conta ainda não é verificada.

    Mais o erro ocorre nesta linha

    conexao = new OleDbConnection(connetionString);

    (O formato da cadeia de inicialização não está de acordo com a especificação iniciada no índice 69.)

    quarta-feira, 20 de maio de 2015 16:27
  • Você instalou o ACER DRIVER que passei?, modifica o nome desse arquivo troca o "-" por "_" underline

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel


    • Editado Mr. GMSOFT quarta-feira, 20 de maio de 2015 16:30
    quarta-feira, 20 de maio de 2015 16:29
  • Instalei sim ! também mudei o "-" e o problema persiste!

    Eu não sei mais o que fazer, não pensei que seria tão maçante assim uma conexão kkkk

    quarta-feira, 20 de maio de 2015 16:52
  • Se tudo estiver realmente correto não era para apresentar erro.

    1 - Verifica o caminho para o banco de dados (você colocou como se o mesmo estivesse na mesma pasta do executável);

    2 - Tente essa string de conexão:

    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=jct-bancodedados.accdb;Persist Security Info=False;"
    3 - Muda o tipo de projeto (Menu->Project->Properties) muda seu TargetBuild para de "ANY" para "X86".




    Teste novamente


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 20 de maio de 2015 17:02
  • BOM ! fiz os 3 passos que você me recomendou, e finalmente o Mssagebox.show("Conexão Aberta") Apareceu !

    Mais um novo erro apareceu.

    Erro ao abrir conexao ! System.Data.OleDb.OleDbexcepton (0x80040E14): Erro de sintaxe na instrução INSTER INTO.

    Mr, tenho uma dúvida, quando conseguirmos fazer está aplicação rodar, ela ficará limitada apenas para computadores X86 ?

    quarta-feira, 20 de maio de 2015 17:24
  • O erro de INSERT é alguma coisa que esta passando errada, nessa parte pressiona a TECLA F9 (BREAKPOINT)
    e veja o valor dela colocando o mouse sobre o "sql"
    comandos = new OleDbCommand(sql, conexao);
    E quanto ao segundo questionamento, todos os programas geralmente em X86 funcionam para X64 mais o contrario não funciona.


    OBS: O comando INSERT quando as variaveis forem do tipo Varchar( string) devem ficar entre ASPAS SIMPES:
     sql = "INSERT INTO(NOME,SOBRENOME)VALUES('" + txtNome.Text + "','" +txtSobrenome+ "')";




    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel


    • Editado Mr. GMSOFT quarta-feira, 20 de maio de 2015 17:48
    quarta-feira, 20 de maio de 2015 17:46
  • bom, quando chega nessa parte o valor da sql é exatamente os .Text

    quando passo o mouse por cima:

    "INSERT INTO(NOME,SOBRENOME)VALUES(BRUNO,CASTRO)"

    Então continuei debugando..

    comandos.ExecuteNonQuery();
                    comandos.Dispose();
                    conexao.Close();
                    MessageBox.Show ("Comando executado!!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao abrir a conexao!" + ex.ToString());
                }

    e quando cheguei no .ExecuteNonQuery();

    ele vai direto pro catch.

    quarta-feira, 20 de maio de 2015 17:55
  • Exatamente o que pensei esta errado, falta as aspas simples, substitua por esse daqui o seu:

    sql = "INSERT INTO(NOME,SOBRENOME)VALUES('" + txtNome.Text + "','" +txtSobrenome+ "')";

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 20 de maio de 2015 17:59
  • Fiz a troca ! mas o erro persistiu,

    coloquei novamente o BREAKPOINT  e o valor foi o seguinte:

    "INSERT INTO(nome,sobrenome)VALUES('BRUNO','System.Windows.Forms.TextBox, Text: CASTRO')"

    ---------------------------------------------------------------------------------

    Na verdade estava faltando o .Text do sobrenome, fiz a correção mas mesmo assim o erro persiste

    e o valor da sql agora é:

    "INSERT INTO(NOME,SOBRENOME)VALUES('BRUNO','SANTOS')"

    • Editado BrunoCastro quarta-feira, 20 de maio de 2015 18:20
    quarta-feira, 20 de maio de 2015 18:09
  • Você não colocou o .Text na segunda variavel

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 20 de maio de 2015 18:18
  • Na verdade estava faltando o .Text do sobrenome, fiz a correção mas mesmo assim o erro persiste

    e o valor da sql agora é:

    "INSERT INTO(NOME,SOBRENOME)VALUES('BRUNO','SANTOS')"

    quarta-feira, 20 de maio de 2015 18:23
  • Ta faltando o nome da tabela no INSERT INTO, que corresponde ao seu banco

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel


    • Editado Mr. GMSOFT quarta-feira, 20 de maio de 2015 18:32
    quarta-feira, 20 de maio de 2015 18:31
  • Meu amigo, agradeço cada minuto que você passou quebrando a cabeça aqui comigo, agradeço muito sua ajuda, foi de suma importância !

    RESOLVIDO ! :D

    Um bom dia e até a próxima dúvida !! HEHEHE

    quarta-feira, 20 de maio de 2015 18:44
  • Marca a resposta para finalizar, ate mais :)

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 20 de maio de 2015 18:46