Gravar Data vazia no MySQL

.NET

11/04/2011

Ola pessoal, sempre trabalhei com SQLServer, agora estou apanhando do MySQL, tenho uma tabela onde preciso grvar datas em branco, vazia, mas não consigo, minha tabela esta assim, assim:

CREATE TABLE IF NOT EXISTS tbl_internos (  `id` int(6) NOT NULL AUTO_INCREMENT,  `nome` varchar(60) NOT NULL,  `data_nasc` date DEFAULT NULL,  `cpf` varchar(16) DEFAULT NULL,  `rg` varchar(12) DEFAULT NULL,  `cep` varchar(12) DEFAULT NULL,  `endereco` varchar(50) DEFAULT NULL,  `numero` varchar(6) DEFAULT NULL,  `complemento` varchar(20) DEFAULT NULL,  `bairro` varchar(20) DEFAULT NULL,  `cidade` varchar(30) DEFAULT NULL,  `uf` varchar(2) DEFAULT NULL,  `data_admissao` date DEFAULT NULL,   `pai` varchar(50) DEFAULT NULL,  `mae` varchar(50) DEFAULT NULL,  `obs` varchar(254) DEFAULT NULL,  `idpresidio` smallint(6) DEFAULT '1',  `foto` longblob,  `tipo_foto` varchar(20) DEFAULT NULL,  PRIMARY KEY (`id`),  KEY `nome` (`nome`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

No primeiro cadastro, entro com nome, data_nasc, e foto, os demais ficam em brnaco, porem me paresenta esses erro no cadastro:
String was not recognized as a valid DateTime.Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.FormatException: String was not recognized as a valid DateTime.

Source Error: 

Line 204:            cmd.Parameters.AddWithValue("@cidade", txtCidade.Text);
Line 205:            cmd.Parameters.AddWithValue("@uf", txtUF.Text);
Line 206:            cmd.Parameters.AddWithValue("@data_admissao", Convert.ToDateTime(txtDataBatismo.Text, DateTimeFormatInfo.InvariantInfo));
Line 207:            cmd.Parameters.AddWithValue("@pai", txtNomePai.Text);
Line 208:            cmd.Parameters.AddWithValue("@mae", txtNomeMae);
Source File: C:\Users\paulo\Documents\Visual Studio 2010\Projects\ShalomSede\IPCMS\CadastroDeInternos.aspx.cs    Line: 206 

Stack Trace: 


Meu procedimento:
 #region "Gravadando os Dados"        private void SalvarComFoto()        {            byte[] img = FileUpload1.FileBytes;            string tipo_foto = FileUpload1.PostedFile.ContentType;
                        MySqlConnection Conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["Conexao"].ConnectionString);            MySqlCommand cmd = new MySqlCommand();
            string strSQL = "insert into membros ( nome, data_nasc, cpf, rg, cep, endereco, numero, complemento, " +                 "bairro, cidade, uf, data_admissao, pai, mae, obs, idpresidio, foto, tipo_foto) " +            "values (upper(@nome), @data_nasc, @cpf, @rg, @cep, @endereco, @numero, @complemento, @bairro, @cidade, " +                            "@uf, @data_admissao, "@pai, @mae, @obs, @idpresidio, @foto, @tipo_foto)";
            cmd.Parameters.AddWithValue("@nome", txtNome.Text);            cmd.Parameters.AddWithValue("@data_nasc", Convert.ToDateTime(txtDataNasc.Text, DateTimeFormatInfo.InvariantInfo));            cmd.Parameters.AddWithValue("@cpf", txtCPF.Text);            cmd.Parameters.AddWithValue("@rg", txtRG.Text);            cmd.Parameters.AddWithValue("@cep", txtCEP.Text);            cmd.Parameters.AddWithValue("@endereco", txtEndereco.Text);            cmd.Parameters.AddWithValue("@numero", txtNumero.Text);            cmd.Parameters.AddWithValue("@complemento", txtComplemento.Text);            cmd.Parameters.AddWithValue("@bairro", txtBairro.Text);            cmd.Parameters.AddWithValue("@cidade", txtCidade.Text);            cmd.Parameters.AddWithValue("@uf", txtEstado.Text);            cmd.Parameters.AddWithValue("@data_admissao", Convert.ToDateTime(txtDataAdmissao.Text, DateTimeFormatInfo.InvariantInfo));            cmd.Parameters.AddWithValue("@pai", txtPai.Text);            cmd.Parameters.AddWithValue("@mae", txtMae.Text);            cmd.Parameters.AddWithValue("@obs", txtObs.Text);            cmd.Parameters.AddWithValue("@idpresidio", dpPresidios.SelectedValue);            cmd.Parameters.AddWithValue("@foto", img);            cmd.Parameters.AddWithValue("@tipo_foto", tipo_foto);
            try            {                cmd.Connection = Conn;                cmd.CommandText = strSQL;                cmd.CommandType = CommandType.Text;                Conn.Open();                cmd.ExecuteNonQuery();                LimparCampos();            }            catch (MySqlException ex)            {                Response.Write(ex.ToString());            }            finally            {                cmd.Dispose();                Conn.Close();                lblMensagem.Text = "Gravado com sucesso !!!";            }        }
O mesmo ocorre com Data de Nascimento mesmo sendo nulo.
Agradeço qualquer ajuda.
Paulo Freire

Paulo Freire

Curtidas 0

Respostas

Paulo Freire

Paulo Freire

11/04/2011


Ola pessoal, sempre trabalhei com SQLServer, agora estou apanhando do MySQL, tenho uma tabela onde preciso grvar datas em branco, vazia, mas não consigo, minha tabela esta assim, assim:

CREATE TABLE IF NOT EXISTS tbl_internos (  `id` int(6) NOT NULL AUTO_INCREMENT,  `nome` varchar(60) NOT NULL,  `data_nasc` date DEFAULT NULL,  `cpf` varchar(16) DEFAULT NULL,  `rg` varchar(12) DEFAULT NULL,  `cep` varchar(12) DEFAULT NULL,  `endereco` varchar(50) DEFAULT NULL,  `numero` varchar(6) DEFAULT NULL,  `complemento` varchar(20) DEFAULT NULL,  `bairro` varchar(20) DEFAULT NULL,  `cidade` varchar(30) DEFAULT NULL,  `uf` varchar(2) DEFAULT NULL,  `data_admissao` date DEFAULT NULL,   `pai` varchar(50) DEFAULT NULL,  `mae` varchar(50) DEFAULT NULL,  `obs` varchar(254) DEFAULT NULL,  `idpresidio` smallint(6) DEFAULT '1',  `foto` longblob,  `tipo_foto` varchar(20) DEFAULT NULL,  PRIMARY KEY (`id`),  KEY `nome` (`nome`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

No primeiro cadastro, entro com nome, data_nasc, e foto, os demais ficam em brnaco, porem me paresenta esses erro no cadastro:
String was not recognized as a valid DateTime.Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.FormatException: String was not recognized as a valid DateTime.

Source Error: 

Line 204:            cmd.Parameters.AddWithValue("@cidade", txtCidade.Text);

Line 205:            cmd.Parameters.AddWithValue("@uf", txtUF.Text);

Line 206:            cmd.Parameters.AddWithValue("@data_admissao", Convert.ToDateTime(txtDataAdmissao.Text, DateTimeFormatInfo.InvariantInfo));

Line 207:            cmd.Parameters.AddWithValue("@pai", txtNomePai.Text);

Line 208:            cmd.Parameters.AddWithValue("@mae", txtNomeMae);
Source File: C:\Users\paulo\Documents\Visual Studio 2010\Projects\ShalomSede\IPCMS\CadastroDeInternos.aspx.cs    Line: 206 

Stack Trace: 


Meu procedimento:
 #region "Gravadando os Dados"        private void SalvarComFoto()        {            byte[] img = FileUpload1.FileBytes;            string tipo_foto = FileUpload1.PostedFile.ContentType;
                        MySqlConnection Conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["Conexao"].ConnectionString);            MySqlCommand cmd = new MySqlCommand();
            string strSQL = "insert into membros ( nome, data_nasc, cpf, rg, cep, endereco, numero, complemento, " +                 "bairro, cidade, uf, data_admissao, pai, mae, obs, idpresidio, foto, tipo_foto) " +            "values (upper(@nome), @data_nasc, @cpf, @rg, @cep, @endereco, @numero, @complemento, @bairro, @cidade, " +                            "@uf, @data_admissao, "@pai, @mae, @obs, @idpresidio, @foto, @tipo_foto)";
            cmd.Parameters.AddWithValue("@nome", txtNome.Text);            cmd.Parameters.AddWithValue("@data_nasc", Convert.ToDateTime(txtDataNasc.Text, DateTimeFormatInfo.InvariantInfo));            cmd.Parameters.AddWithValue("@cpf", txtCPF.Text);            cmd.Parameters.AddWithValue("@rg", txtRG.Text);            cmd.Parameters.AddWithValue("@cep", txtCEP.Text);            cmd.Parameters.AddWithValue("@endereco", txtEndereco.Text);            cmd.Parameters.AddWithValue("@numero", txtNumero.Text);            cmd.Parameters.AddWithValue("@complemento", txtComplemento.Text);            cmd.Parameters.AddWithValue("@bairro", txtBairro.Text);            cmd.Parameters.AddWithValue("@cidade", txtCidade.Text);            cmd.Parameters.AddWithValue("@uf", txtEstado.Text);            cmd.Parameters.AddWithValue("@data_admissao", Convert.ToDateTime(txtDataAdmissao.Text, DateTimeFormatInfo.InvariantInfo));            cmd.Parameters.AddWithValue("@pai", txtPai.Text);            cmd.Parameters.AddWithValue("@mae", txtMae.Text);            cmd.Parameters.AddWithValue("@obs", txtObs.Text);            cmd.Parameters.AddWithValue("@idpresidio", dpPresidios.SelectedValue);            cmd.Parameters.AddWithValue("@foto", img);            cmd.Parameters.AddWithValue("@tipo_foto", tipo_foto);
            try            {                cmd.Connection = Conn;                cmd.CommandText = strSQL;                cmd.CommandType = CommandType.Text;                Conn.Open();                cmd.ExecuteNonQuery();                LimparCampos();            }            catch (MySqlException ex)            {                Response.Write(ex.ToString());            }            finally            {                cmd.Dispose();                Conn.Close();                lblMensagem.Text = "Gravado com sucesso !!!";            }        }
O mesmo ocorre com Data de Nascimento mesmo sendo nulo.
Agradeço qualquer ajuda.
 
GOSTEI 0
Evandro Lopes

Evandro Lopes

11/04/2011

Bom dia tudo bem? Sinceramente nunca precisei fazer isso no mySQl, porém acredito q o erro esta dando por causa disso -> Convert.ToDateTime, ele esta tentando converter algo, seja um valor nulo ou não, e da erro. Tente fazer sem o convert apenas para testar.   Abraços.
GOSTEI 0
Paulo Freire

Paulo Freire

11/04/2011

Ola Evandro, eu tirando o Convert.toDateTime, me retorna ou tro erro:
MySql.Data.MySqlClient.MySqlException (0x80004005): Incorrect date value: '12/04/2011' for column 'data_nasc' at row 1 at MySql.Data.MySqlClient.MySqlStream.ReadPacket() 
GOSTEI 0
Evandro Lopes

Evandro Lopes

11/04/2011

Tente salvar a data neste formato '2011-04-12', talvez seja o formato da Data, mas aquele convert q te falei concerteza poderia dar erro se por ventura a data fosse NULL ou inválida. Fique atento aos formatos do MySql, talvez ele possa dar erro por causa disso. http://dev.mysql.com/doc/refman/5.1/en/datetime.html Abraços
GOSTEI 0
André Lima

André Lima

11/04/2011

Olá amigo, tente fazer da seguinte maneira:  
object dataAdmissao = DBNull.Value;
if (!txtDataAdmissao.Text.Equals(string.Empty))
   dataAdmissao = Convert.ToDateTime(txtDataAdmissao.Text, DateTimeFormatInfo.InvariantInfo);
cmd.Parameters.AddWithValue("@data_admissao", dataAdmissao);
GOSTEI 0
Evandro Lopes

Evandro Lopes

11/04/2011

Putz, agora q vi, o André falou algo que deixei passar, em algum momento vc tem q converter a data, eu esqueci de falar isso, pedi para tirar o Convert, porém nao falei qndo utiliza-lo. Para ser ainda melhor vc pode fazer o seguinte nesse codigo do André
 

object dataAdmissao = DBNull.Value;
if (!txtDataAdmissao.Text.Equals(string.Empty))
{
   //Antes de converter, verificar se a data é uma data Valida
   bool resultadoVerificacao = true;
   DateTime dtAdmissao;
   
   resultadoVerificacao = DateTime.TryParse(txtDataAdmissao.Text, out dtAdmissao);

   if(resultadoVerificacao)
       dataAdmissao = dtAdmissao;
   else 
       //vc exibe o erro da data invalida para o usuario

}
cmd.Parameters.AddWithValue("@data_admissao", dataAdmissao);
GOSTEI 0
Evandro Lopes

Evandro Lopes

11/04/2011

Putz, agora q vi, o André falou algo que deixei passar, em algum momento vc tem q converter a data, eu esqueci de falar isso, pedi para tirar o Convert, porém nao falei qndo utiliza-lo. Para ser ainda melhor vc pode fazer o seguinte nesse codigo do André
 

object dataAdmissao = DBNull.Value;
if (!txtDataAdmissao.Text.Equals(string.Empty))
{
   //Antes de converter, verificar se a data é uma data Valida
   bool resultadoVerificacao = true;
   DateTime dtAdmissao;
   
   resultadoVerificacao = DateTime.TryParse(txtDataAdmissao.Text, out dtAdmissao);

   if(resultadoVerificacao)
       dataAdmissao = dtAdmissao;
   else 
       //vc exibe o erro da data invalida para o usuario

}
cmd.Parameters.AddWithValue("@data_admissao", dataAdmissao);
GOSTEI 0
Paulo Freire

Paulo Freire

11/04/2011

Valeu Evandro e André, mas é muito complicado gravar data no Mysql, vou ter que fazer tudo isso para os demais campos date, irei convencer meu chefe a usar SQLServer, vai ser uma briga feia, mas obrigado.  
GOSTEI 0
Evandro Lopes

Evandro Lopes

11/04/2011

Hahahahaha, po aceita o desafio, vc só vai ter a crescer em conhecimento e profissional. As vezes o caminho mais facil é o mais longo e doloroso.   Abraços.
GOSTEI 0
Paulo Freire

Paulo Freire

11/04/2011

É verdade vou insistir mais um pouco, só consegui gravar data, colocando a data na propriedade do TextBox, assim, 01/01/1900, ai mesmo eu não digitando data nenhum grava.
GOSTEI 0
POSTAR