Array
(
)

Gravar Data vazia no MySQL

Paulo Freire
|
MVP
    11 abr 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
|
MVP
    11 abr 2011



Citação:
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. 

0
|
0

Evandro Lopes
   - 11 abr 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.

0
|
0

Paulo Freire
|
MVP
    11 abr 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() 

0
|
0

Evandro Lopes
   - 11 abr 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

0
|
0

Andrealveslima
   - 11 abr 2011

Olá amigo, tente fazer da seguinte maneira:   #Código

object dataAdmissao = DBNull.Value;
if (!txtDataAdmissao.Text.Equals(string.Empty))
   dataAdmissao = Convert.ToDateTime(txtDataAdmissao.Text, DateTimeFormatInfo.InvariantInfo);
cmd.Parameters.AddWithValue("@data_admissao", dataAdmissao);

0
|
0

Evandro Lopes
   - 11 abr 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é #Código

 

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

0
|
0

Evandro Lopes
   - 11 abr 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é #Código

 

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

0
|
0

Paulo Freire
|
MVP
    12 abr 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.  

0
|
0

Evandro Lopes
   - 12 abr 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.

0
|
0

Paulo Freire
|
MVP
    12 abr 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.

0
|
0