none
ACEITAR VALOR NULO RRS feed

  • Pergunta

  • OLÁ,

    ESTOU DESENVOLVENDO UMA APLICAÇÃO, ONDE É REALIZADO UM CADASTRO BÁSICO DE UM FUNCIONÁRIO.

    ONDE TENHO CAMPOS COMO NOME, DEPARTAMENTO, RAMAL E EMAIL.

    PORÉM ALGUNS FUNCIONARIOS NÃO TEM EMAIL E/OU RAMAL.

    E QUANDO VOU INSERIR OS DADOS NO BANCO, DA ERRO DE SINTAXE, POIS OS VALORES NÃO ESTÃO PREENCHIDOS.

    GOSTARIA DE SABER UMA FORMA DE RESOLVER ESSE MEU PROBLEMA.

    O CÓDIGO SQL QUE ESTOU USANDO NA APLIACAÇÃO É O SEGUINTE:

    INSERT INTO Tbl_funcionario (Data_cad_func,Nome_func, Cod_depto_func, Ramal_func, EMail_func, Situacao) VALUES ('"

     

     

    & CDate(Today) & "','" & (txt_nome.Text).ToString & "'," & txt_departamento.SelectedValue & "," & txt_ramal.Text & ",'" & (txt_email.Text).ToString & "','" & txt_situacao.Text & "')

    quinta-feira, 19 de janeiro de 2012 15:51

Respostas

  • Segue um exemplo de como pode ser feito porém fiz tudo na mão espero que lhe ajude..

    Diagrama BD:

    Cs:

    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.SqlClient;
    
    namespace InsertBd
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            //Evento click do botão gravar
            private void btnGravar_Click(object sender, EventArgs e)
            {
                //Instância do objeto cliente a ser passado
                //como parâmetro na chamada do método para inserir
                Funcionario f = new Funcionario();
                //Atribuo os valores dos Textbox as propriedades
                //do objeto
                f.Nome = txtNome.Text;
                f.Email = txtEmail.Text;
                //Chamo o método inserir passando o objeto
                //necessário como parâmetro
                Inserir(f);
            }
    
            //classe funcionario e seus atributos
            public class Funcionario
            {
                public int IdFuncionario { get; set; }
                public string Nome { get; set; }
                public string Email { get; set; }
            }
    
            //Método para inserir que recebe um 
            //objeto Funcionario como parâmetro
            private void Inserir(Funcionario funcionario)
            {
                //Instância da conexão
                SqlConnection conn = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=Exemplo;Integrated Security=True;Pooling=False");
                // query do Comando parametrizado
                string query = "INSERT INTO Funcionario (Nome, Email) VALUES (@Nome, @Email)";
                //Instância do comando
                SqlCommand cmd = new SqlCommand(query, conn);
                //Preenchendo os parâmetros com o objeto funcionário
                //recebido pelo método
                cmd.Parameters.AddWithValue("@Nome", funcionario.Nome);
                cmd.Parameters.AddWithValue("@Email", funcionario.Email);
                //Abro conexão
                conn.Open();
                //executo o comando
                cmd.ExecuteNonQuery();
                //Fecho conexão
                conn.Close();
            }
        }
    }
    
    


    BD:

     

    Abraços e espero ter ajudado!


    Estudar, Estudar e Estudar! Não existe caminho curto.
    sábado, 21 de janeiro de 2012 10:54

Todas as Respostas

  • Marque a checkbox "Allow Null" nos campos e-mail e ramal da tabela.

    E usa parâmetros.

    quinta-feira, 19 de janeiro de 2012 16:18
  • Felipe o que está acontecendo é que sua tabela não está aceitando valores nulos, então você tem que ir até o seu banco de dados, e habilitar alguns campos como nulláveis.

    Outra coisa, a forma como você está acessando seu banco de dados não é boa, porque ele está vulnerável a SQL Injection, isso quer dizer que, se por algum acaso você digitar comandos sql nas suas caixas de textos, esse comando será executado no seu banco, porque você está concatenando a valor da caixa de texto diretamente no sql... para saber mais veja estes links:

    http://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_SQL

    A solução para isso seria usar parâmetros para fazer a inserção no banco de dados, veja estes links:

    http://www.linhadecodigo.com.br/artigo/216/acessando-banco-de-dados-em-netparte-2.aspx


    Ao infinito e além!
    twitter @elzacky

    • Editado Fabio R. Luz quinta-feira, 19 de janeiro de 2012 16:53
    quinta-feira, 19 de janeiro de 2012 16:52
  • Aonde aparece essa opção? Nas propriedades do textbox?

    quinta-feira, 19 de janeiro de 2012 16:52
  • Não nao, quando digo aceitar valor nulo estou falando da sua tabela, no seu banco de dados, pode ser access, sqlserver, mysql, etc.... Na sua tabela você pode especificar quais campos podem ser nulos ...
    Ao infinito e além!
    twitter @elzacky
    quinta-feira, 19 de janeiro de 2012 17:28
  • No banco ja esta configurado para aceitar valor nulo.

    O Problema é que na hora da inserção, como não tem nada escrito, ele dá erro de sintaxe.

    Eu estou usando o objeto record set para executar o comando no banco.

    Como faço para criar os parametros com o record set?

    Obrigado

    sexta-feira, 20 de janeiro de 2012 10:47
  • Segue um exemplo de como pode ser feito porém fiz tudo na mão espero que lhe ajude..

    Diagrama BD:

    Cs:

    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.SqlClient;
    
    namespace InsertBd
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            //Evento click do botão gravar
            private void btnGravar_Click(object sender, EventArgs e)
            {
                //Instância do objeto cliente a ser passado
                //como parâmetro na chamada do método para inserir
                Funcionario f = new Funcionario();
                //Atribuo os valores dos Textbox as propriedades
                //do objeto
                f.Nome = txtNome.Text;
                f.Email = txtEmail.Text;
                //Chamo o método inserir passando o objeto
                //necessário como parâmetro
                Inserir(f);
            }
    
            //classe funcionario e seus atributos
            public class Funcionario
            {
                public int IdFuncionario { get; set; }
                public string Nome { get; set; }
                public string Email { get; set; }
            }
    
            //Método para inserir que recebe um 
            //objeto Funcionario como parâmetro
            private void Inserir(Funcionario funcionario)
            {
                //Instância da conexão
                SqlConnection conn = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=Exemplo;Integrated Security=True;Pooling=False");
                // query do Comando parametrizado
                string query = "INSERT INTO Funcionario (Nome, Email) VALUES (@Nome, @Email)";
                //Instância do comando
                SqlCommand cmd = new SqlCommand(query, conn);
                //Preenchendo os parâmetros com o objeto funcionário
                //recebido pelo método
                cmd.Parameters.AddWithValue("@Nome", funcionario.Nome);
                cmd.Parameters.AddWithValue("@Email", funcionario.Email);
                //Abro conexão
                conn.Open();
                //executo o comando
                cmd.ExecuteNonQuery();
                //Fecho conexão
                conn.Close();
            }
        }
    }
    
    


    BD:

     

    Abraços e espero ter ajudado!


    Estudar, Estudar e Estudar! Não existe caminho curto.
    sábado, 21 de janeiro de 2012 10:54