Usuário com melhor resposta
Sistema em C# - Windows Form- aceitar a inclusão de campo data vazio

Pergunta
-
Bom dia, tenho a estrutura de cóigo abaixo,como faço para que eu consiga incluir uma
data vazia, no caso a dataPagto?
Dá erro e ele não inclu quando deixo de informar a data?
No banco o campo dataPagto está formatado para aceitar null
Sou iniciante e c# e estou quebrando a cabeça para conseguir fazer isto, se alguém puder
me exemplificar com os códigos (e/ou métodos)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 Controle_De_Gastos
{
public partial class principal : Form
{
SqlConnection conexao;
SqlCommand comando;
SqlDataAdapter captura;
DataTable tabDespesa;
public principal()
{
InitializeComponent();
}
public void conectaBanco()
{
conexao = new SqlConnection(@"server=.\sqlexpress;Database = xx; Integrated Security = xxx");
conexao.Open();
}public DataTable mostraRegistros()
{
captura = new SqlDataAdapter(comando);
tabDespesa = new DataTable();
captura.Fill(tabDespesa);
return (tabDespesa);
}
public void fechaConexao()
{
conexao.Close();
}
public void consulta()
{
comando = new SqlCommand("select d.codDespesa,c.codConta, c.nomeConta,d.dataVcto,d.dataPagto,d.valor,s.codSituacao,s.nomeSituacao from despesa d join conta c on d.codconta = c.codconta join situacao s on d.codSituacao = s.codSituacao where c.codConta = 1 order by dataVcto ", conexao);
dgvGastos.DataSource = mostraRegistros();
}public void consultaCondominio()
{
comando = new SqlCommand("select d.codDespesa,c.codConta, c.nomeConta,d.dataVcto,d.dataPagto,d.valor,s.codSituacao,s.nomeSituacao from despesa d join conta c on d.codconta = c.codconta join situacao s on d.codSituacao = s.codSituacao where c.codConta = 2 order by dataVcto ", conexao);
dgvGastos.DataSource = mostraRegistros();
}public String RetornaValorParaBD(decimal valor)
{
//faz-se aqui os tratamentos de decimal
return valor.ToString("0.00").Replace(".", "").Replace(",", ".");
}private bool IsDate(String DateToValid)
{
DateTime Date;
return DateTime.TryParse(DateToValid, out Date);
}
public void incluirGasto(int codConta, string valor, DateTime dataVcto, DateTime dataPagto, int codSituacao )
{
comando.CommandText = "INSERT INTO despesa (codConta,valor,dataVcto,dataPagto, codSituacao)VALUES ('" + codConta + "', '" + valor + "','" + dataVcto.ToString("yyyyMMdd") + "', '" + dataPagto.ToString("yyyyMMdd") + "', '" + codSituacao + "')";
comando.ExecuteNonQuery();
}public void alterarGastos(int codDespesa, int codConta, string valor, DateTime dataVcto, DateTime dataPagto, int codSituacao)
{
comando.CommandText = "UPDATE despesa SET codConta = '" + codConta + "',valor= '" + valor + "',dataVcto='" + dataVcto.ToString("yyyyMMdd") + "', dataPagto='" + dataPagto.ToString("yyyyMMdd") + "',codSituacao= '" + codSituacao + "'WHERE codDespesa=" + codDespesa;
comando.ExecuteNonQuery();
}
private void principal_Load(object sender, EventArgs e)
{
try
{
conectaBanco();
consulta();
dgvGastos.DataSource = tabDespesa;}
catch (Exception erro)
{
MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos");
}
}private void btnGravar_Click(object sender, EventArgs e)
{
try
{
if (txtValor.Text !="" && mskVcto.Text !="" || mskPagto.Text!="")
{
conectaBanco();
consulta();
incluirGasto(int.Parse(cbDespesa.SelectedValue.ToString()), RetornaValorParaBD(Convert.ToDecimal(txtValor.Text)), DateTime.Parse(mskVcto.Text), DateTime.Parse(mskPagto.Text), int.Parse(cbSituacao.SelectedValue.ToString()));
MessageBox.Show("Gasto incluído com Sucesso", "Controle de Gastos");
consulta();
txtValor.Clear();
mskVcto.Clear();
mskPagto.Clear();
}else
{
MessageBox.Show("Para incluir uma despesa é necessário no mínimo o Tipo, o Valor e o Vencimento da mesma!!! ", "Controle de Gastos");}
}catch (Exception erro)
{
MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos");
}
}private void btnIncluir_Click(object sender, EventArgs e)
{
txtValor.Clear();
mskVcto.Clear();
mskPagto.Clear();
txtCodigo.Clear();
MessageBox.Show("Digite os dados, para gravar pressione o botão: Gravar Dados", "Controle de Gastos");
}
private void btnAlterar_Click(object sender, EventArgs e)
{
try
{
conectaBanco();
consulta();
if (MessageBox.Show("Deseja alterar?", "Atenção", MessageBoxButtons.YesNo) == DialogResult.No)
return;
else
{
alterarGastos(int.Parse(txtCodigo.Text), int.Parse(cbDespesa.SelectedValue.ToString()), RetornaValorParaBD(Convert.ToDecimal(txtValor.Text)), DateTime.Parse(mskVcto.Text), DateTime.Parse(mskPagto.Text), int.Parse(cbSituacao.SelectedValue.ToString()));
MessageBox.Show("Gasto alterado com Sucesso", "Controle de Gastos");
consulta();
}}
catch (Exception erro)
{
MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos");
}
Respostas
-
Acabei de descobrir o erro
marquei em negrito e sublinhado abaixo
private void btnGravar_Click(object sender, EventArgs e) { DateTime? DateVcto; // esta variável tem que declarar no início do código DateTime? DatePgto; // esta variável tem que declrara no inicio do codigo try { if (txtValor.Text !="" && mskVcto.Text !="" || mskPagto.Text!="") { if( IsDate( mskVcto.Text )) { DateVcto = DateTime.Parse( MskVcto.Text ); } if( IsDate( mskPagto.Text )) { DatePgto = DateTime.Parse( mskPagto.Text ); } conectaBanco(); consulta(); incluirGasto(int.Parse(cbDespesa.SelectedValue.ToString()), RetornaValorParaBD(Convert.ToDecimal(txtValor.Text)), DateVcto, DatePgto, int.Parse(cbSituacao.SelectedValue.ToString())); MessageBox.Show("Gasto incluído com Sucesso", "Controle de Gastos"); consulta(); txtValor.Clear(); mskVcto.Clear(); mskPagto.Clear(); } else { MessageBox.Show("Para incluir uma despesa é necessário no mínimo o Tipo, o Valor e o Vencimento da mesma!!! ", "Controle de Gastos"); } } catch (Exception erro) { MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos"); } } public void incluirGasto(int codConta, string valor, DateTime? dataVcto, DateTime? dataPagto, int codSituacao ) { String DateVcto = "NULL"; String DatePagto = "NULL"; if( dataVcto.HasValue ) { DateVcto = "'" + dataVcto.ToString("yyyyMMdd") + "'"; // sai fora
} if( dataPagto.HasValue ) { DatePagto = "'" + dataPagto.ToString("yyyyMMdd") + "'"; // sai fora } comando.CommandText = "INSERT INTO despesa (codConta,valor,dataVcto,dataPagto, codSituacao)VALUES ('" + codConta + "', '" + valor + "'," + DateVcto + ", " + DatePagto + ", '" + codSituacao + "')"; comando.ExecuteNonQuery(); }
- Marcado como Resposta DilsonDG sexta-feira, 8 de fevereiro de 2013 22:50
Todas as Respostas
-
Substitua os 2 métodos:
private void btnGravar_Click(object sender, EventArgs e) { DateTime? DateVcto; DateTime? DatePgto; try { if (txtValor.Text !="" && mskVcto.Text !="" || mskPagto.Text!="") { if( IsDate( mskVcto.Text )) { DateVcto = DateTime.Parse( MskVcto.Text ); } if( IsDate( mskPagto.Text )) { DatePgto = DateTime.Parse( mskPagto.Text ); } conectaBanco(); consulta(); incluirGasto(int.Parse(cbDespesa.SelectedValue.ToString()), RetornaValorParaBD(Convert.ToDecimal(txtValor.Text)), DateVcto, DatePgto, int.Parse(cbSituacao.SelectedValue.ToString())); MessageBox.Show("Gasto incluído com Sucesso", "Controle de Gastos"); consulta(); txtValor.Clear(); mskVcto.Clear(); mskPagto.Clear(); } else { MessageBox.Show("Para incluir uma despesa é necessário no mínimo o Tipo, o Valor e o Vencimento da mesma!!! ", "Controle de Gastos"); } } catch (Exception erro) { MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos"); } } public void incluirGasto(int codConta, string valor, DateTime? dataVcto, DateTime? dataPagto, int codSituacao ) { String DateVcto = "NULL"; String DatePagto = "NULL"; if( dataVcto.HasValue ) { DateVcto = "'" + dataVcto.ToString("yyyyMMdd") + "'"; } if( dataPagto.HasValue ) { DatePagto = "'" + dataPagto.ToString("yyyyMMdd") + "'"; } comando.CommandText = "INSERT INTO despesa (codConta,valor,dataVcto,dataPagto, codSituacao)VALUES ('" + codConta + "', '" + valor + "'," + DateVcto + ", " + DatePagto + ", '" + codSituacao + "')"; comando.ExecuteNonQuery(); }
-
-
-
-
Acabei de descobrir o erro
marquei em negrito e sublinhado abaixo
private void btnGravar_Click(object sender, EventArgs e) { DateTime? DateVcto; // esta variável tem que declarar no início do código DateTime? DatePgto; // esta variável tem que declrara no inicio do codigo try { if (txtValor.Text !="" && mskVcto.Text !="" || mskPagto.Text!="") { if( IsDate( mskVcto.Text )) { DateVcto = DateTime.Parse( MskVcto.Text ); } if( IsDate( mskPagto.Text )) { DatePgto = DateTime.Parse( mskPagto.Text ); } conectaBanco(); consulta(); incluirGasto(int.Parse(cbDespesa.SelectedValue.ToString()), RetornaValorParaBD(Convert.ToDecimal(txtValor.Text)), DateVcto, DatePgto, int.Parse(cbSituacao.SelectedValue.ToString())); MessageBox.Show("Gasto incluído com Sucesso", "Controle de Gastos"); consulta(); txtValor.Clear(); mskVcto.Clear(); mskPagto.Clear(); } else { MessageBox.Show("Para incluir uma despesa é necessário no mínimo o Tipo, o Valor e o Vencimento da mesma!!! ", "Controle de Gastos"); } } catch (Exception erro) { MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos"); } } public void incluirGasto(int codConta, string valor, DateTime? dataVcto, DateTime? dataPagto, int codSituacao ) { String DateVcto = "NULL"; String DatePagto = "NULL"; if( dataVcto.HasValue ) { DateVcto = "'" + dataVcto.ToString("yyyyMMdd") + "'"; // sai fora
} if( dataPagto.HasValue ) { DatePagto = "'" + dataPagto.ToString("yyyyMMdd") + "'"; // sai fora } comando.CommandText = "INSERT INTO despesa (codConta,valor,dataVcto,dataPagto, codSituacao)VALUES ('" + codConta + "', '" + valor + "'," + DateVcto + ", " + DatePagto + ", '" + codSituacao + "')"; comando.ExecuteNonQuery(); }
- Marcado como Resposta DilsonDG sexta-feira, 8 de fevereiro de 2013 22:50
-