Usuário com melhor resposta
Convert Datetime Null

Pergunta
-
Prezados(as),
Há uma coluna no banco de dados de nome gp_databaixa do tipo Date, já no Visual C# ela é declarada como Datetime, este campo será para inserir a data de baixa de terminado documento pendente, porém, ele deve iniciar como Null, pois só irá inserir a data de baixa no dia que resolver o assunto. Sendo isso, fazer um "update" na tela, ele da o seguinte erro: Cadeia de caracteres não foi reconhecida como DateTime válido.
Obs: Meus dados estão em Camadas: Model, BLL e DAL.
private void bt_gpdocumento_gravar_Click(object sender, EventArgs e)
{
Camadas.BLL.GerenciamentoProtocolo bllGereneciamentoProtocolo = new Camadas.BLL.GerenciamentoProtocolo();
Camadas.Model.GerenciamentoProtocolo oProtocolo = new Camadas.Model.GerenciamentoProtocolo();
oProtocolo.gp_codigo = Convert.ToInt32(txtgp_Codigo.Text);
oProtocolo.gp_dataentrada = Convert.ToDateTime(txtgp_Dataentrada.Text);
oProtocolo.doc_codigo = Convert.ToInt32(cbgp_Documento.Text);
oProtocolo.cl_codigo = Convert.ToInt32(cbgp_Cliente.Text);
oProtocolo.gp_descricao = txtgp_Descricao.Text;
oProtocolo.gp_status = cbgp_Status.Text;
oProtocolo.gp_databaixa = Convert.ToDateTime(txtgp_Databaixa.Text);
DialogResult result;
string msg = " ";
if (tipoOper == 'E') {
msg = "Atualizar dados?";
}
result = MessageBox.Show(msg, "Gravar", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
if (result == DialogResult.Yes)
{
bllGereneciamentoProtocolo.Update(oProtocolo);
MessageBox.Show("Dados gravados com sucesso.", "Gravar", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
dtgv_GerenciamentoDocumento.DataSource = bllGereneciamentoProtocolo.Select();
LimparControles();
HabilitaControle(false);
}--------------------------------------------------------------------------------------------------------------------------
UPDATE...
public void Update(Model.GerenciamentoProtocolo oProtocolo)
{
SqlConnection conexao = new SqlConnection(strCon);
string sql = "Update GerenciamentoProtocolo set ";
sql += "gp_dataentrada=@gp_dataentrada, doc_codigo=@doc_codigo,cl_codigo=@cl_codigo, ";
sql += "gp_descricao=@gp_descricao, gp_status=@gp_status, gp_databaixa=@gp_databaixa where gp_codigo=@gp_codigo;";
SqlCommand cmd = new SqlCommand(sql, conexao);
cmd.Parameters.AddWithValue("@gp_codigo", oProtocolo.gp_codigo);
cmd.Parameters.AddWithValue("@gp_dataentrada", oProtocolo.gp_dataentrada);
cmd.Parameters.AddWithValue("@doc_codigo", oProtocolo.doc_codigo);
cmd.Parameters.AddWithValue("@cl_codigo", oProtocolo.cl_codigo);
cmd.Parameters.AddWithValue("@gp_descricao", oProtocolo.gp_descricao);
cmd.Parameters.AddWithValue("@gp_status", oProtocolo.gp_status);
cmd.Parameters.AddWithValue("@gp_databaixa", oProtocolo.gp_databaixa);
conexao.Open();
try
{
cmd.ExecuteNonQuery();
}
catch
{
Console.WriteLine("Erro ao Atualizar Protocolo.");
}
finally
{
conexao.Close();
}
}
Respostas
-
Isso teria que funcionar, se na sua classe esta como nullable deve funcionar olha um exemplo pra esclarecer :
//supondo que declarou em sua classe como nullable tipo DateTime? gp_databaixa; //e em algum momento voce atribuiu a data tipo gp_databaixa = Datetime.Now; /isso deveria funcionar verifica se neste momento o valor que esta na data //veja que como sendo nullable passe sua variavel com .Value //como no link que te enviei cmd.Parameters.AddWithValue("@gp_databaixa", oProtocolo.gp_databaixa.Value);
- Marcado como Resposta Giovani Cr sexta-feira, 22 de novembro de 2013 13:39
-
"Cadeia de caracteres não foi reconhecida como DateTime válido."
Esse erro é de entrada. O que tá sendo passado para o objeto DateTime não é válido.
Pode falar em que linha "estoura" o erro?
- Marcado como Resposta Giovani Cr sexta-feira, 22 de novembro de 2013 13:39
Todas as Respostas
-
Declare o seu gp_databaixa como nullable assim :
DateTime? gp_databaixa;
Olha esta explicação sobre tipos nullable
http://www.macoratti.net/11/03/c_ntp.htm
http://msdn.microsoft.com/pt-br/library/1t3y8s4s(v=vs.90).aspx
- Sugerido como Resposta Fulvio Cezar Canducci Dias terça-feira, 12 de novembro de 2013 18:56
-
-
Isso teria que funcionar, se na sua classe esta como nullable deve funcionar olha um exemplo pra esclarecer :
//supondo que declarou em sua classe como nullable tipo DateTime? gp_databaixa; //e em algum momento voce atribuiu a data tipo gp_databaixa = Datetime.Now; /isso deveria funcionar verifica se neste momento o valor que esta na data //veja que como sendo nullable passe sua variavel com .Value //como no link que te enviei cmd.Parameters.AddWithValue("@gp_databaixa", oProtocolo.gp_databaixa.Value);
- Marcado como Resposta Giovani Cr sexta-feira, 22 de novembro de 2013 13:39
-
-
-
"Cadeia de caracteres não foi reconhecida como DateTime válido."
Esse erro é de entrada. O que tá sendo passado para o objeto DateTime não é válido.
Pode falar em que linha "estoura" o erro?
- Marcado como Resposta Giovani Cr sexta-feira, 22 de novembro de 2013 13:39
-
Bom dia 2ADST1
Peço que caso tenha encontrado alguma solução compartilhe a mesma para auxiliar outros usuários com o mesmo problema.
Att,
Giovani Cruzara – Microsoft Contingent Staff
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.
Msdn Community Support
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.