Gravar Data vazia no MySQL
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.
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
Curtidas 0
Respostas
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.
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
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
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()
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
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
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
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
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
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
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
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