Gravar Data vazia no MySQL

11/04/2011

0

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

Responder

Posts

11/04/2011

Paulo Freire


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.
 
Responder

11/04/2011

Evandro Lopes

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.
Responder

11/04/2011

Paulo Freire

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() 
Responder

11/04/2011

Evandro Lopes

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
Responder

11/04/2011

André Lima

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);
Responder

11/04/2011

Evandro Lopes

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);
Responder

11/04/2011

Evandro Lopes

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);
Responder

12/04/2011

Paulo Freire

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.  
Responder

12/04/2011

Evandro Lopes

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.
Responder

12/04/2011

Paulo Freire

É 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.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar