Usuário com melhor resposta
ACEITAR VALOR NULO

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 & "')
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.- Marcado como Resposta Felipe Pires de Jesus quinta-feira, 26 de janeiro de 2012 13:34
Todas as Respostas
-
-
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
-
-
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 -
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
-
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.- Marcado como Resposta Felipe Pires de Jesus quinta-feira, 26 de janeiro de 2012 13:34