Bom comemorei cedo demais, depois de resolver um problema aqui no forum, veio outro(CLIQUE AQUI PARA VER)
A Imagem abaixo tem haver com não passar a informação para o Obj Pessoa?
No banco está aceitando nullo nos banco de Datitime…
Bom comemorei cedo demais, depois de resolver um problema aqui no forum, veio outro(CLIQUE AQUI PARA VER)
A Imagem abaixo tem haver com não passar a informação para o Obj Pessoa?
No banco está aceitando nullo nos banco de Datitime…
Precisa ver bem o código para entender o erro!
No link que você postou sobre DateTime
aceitando no banco null o código seria mais ou menos assim para funcionar:
Example ex = new Example();
ex.Data = null;
//parte do banco
SqlCommand command = new SqlCommand();
command.CommandText = "INSERT INTO example(data) VALUES(@data)";
command.Parameters.Add("@data", System.Data.SqlDbType.DateTime).Value = (object)ex.Data ?? DBNull.Value;
ou seja, para funcionar a inserção de valores null
dentro do banco é com esse trecho:
(object)ex.Data ?? DBNull.Value;
Poste essa SQL e o código referente para que possa observar!
Bom este é a tabela:
CREATE TABLE [dbo].[Pessoas] (
[Codigo] INT NOT NULL,
[DataAtualizacao] DATETIME NULL,
[Nome] VARCHAR (100) NULL,
[NomeFantasia] VARCHAR (100) NULL,
[DataNascimento] DATE NULL,
[TipoDoc] VARCHAR (4) NULL,
[CNPJ] VARCHAR (14) NULL,
[IDEstrangeiro] VARCHAR (20) NULL,
[CCE] VARCHAR (20) NULL,
[RG] VARCHAR (20) NULL,
[Endereco] VARCHAR (200) NULL,
[Numero] VARCHAR (10) NULL,
[Complemento] VARCHAR (50) NULL,
[Bairro] VARCHAR (50) NULL,
[CEP] VARCHAR (8) NULL,
[CodigoMunicipio] BIGINT NULL,
[Cidade] VARCHAR (50) NULL,
[UF] CHAR (2) NULL,
[CodigoPais] VARCHAR (4) NULL,
[NomePais] VARCHAR (50) NULL,
[DDD] INT NULL,
[Fone] VARCHAR (14) NULL,
[Celular] VARCHAR (14) NULL,
[Email] VARCHAR (60) NULL,
[HomePage] VARCHAR (60) NULL,
[EstadoCivil] INT NULL,
[NomeMae] VARCHAR (100) NULL,
[NomePai] VARCHAR (100) NULL,
[LocalTrabalho] VARCHAR (50) NULL,
[FoneTrabalho] VARCHAR (14) NULL,
[Profissao] VARCHAR (30) NULL,
[LimiteCredito] FLOAT (53) NULL,
[ClassificacaoFinanceira] CHAR (1) NULL,
[ClassificacaoVenda] CHAR (1) NULL,
[DiaVenc] INT NULL,
[Renda] FLOAT (53) NULL,
[ValorMensal] FLOAT (53) NULL,
[ChkSalario] CHAR (1) NULL,
[DataContrato] DATETIME NULL,
[Referencia01] VARCHAR (50) NULL,
[FoneReferencia01] VARCHAR (14) NULL,
[Referencia02] VARCHAR (50) NULL,
[FoneReferencia02] VARCHAR (14) NULL,
[Referencia03] VARCHAR (50) NULL,
[FoneReferencia03] VARCHAR (14) NULL,
[Contato1] VARCHAR (50) NULL,
[Contato2] VARCHAR (50) NULL,
[CodigoRota] BIGINT NULL,
[CodigoTipo] BIGINT NULL,
[TipoCliente] INT NULL,
[TipoExtrangeiro] INT NULL,
[TipoFornecedor] INT NULL,
[TipoFuncionario] INT NULL,
[TipoParceiro] INT NULL,
[TipoTecnico] INT NULL,
[TipoProdutorRural] INT NULL,
[TipoVendedor] INT NULL,
[Desconto10] FLOAT (53) NULL,
[Desconto01] FLOAT (53) NULL,
[Desconto02] FLOAT (53) NULL,
[Desconto03] FLOAT (53) NULL,
[Desconto04] FLOAT (53) NULL,
[Desconto10c] FLOAT (53) NULL,
[Desconto01c] FLOAT (53) NULL,
[Desconto02c] FLOAT (53) NULL,
[Desconto03c] FLOAT (53) NULL,
[Desconto04c] FLOAT (53) NULL,
[ContribuinteICMS] INT NULL,
[OptanteSN] INT NULL,
[Requisicao] CHAR (1) NULL,
[Inativo] NCHAR (10) NULL,
[Observacao] TEXT NULL,
PRIMARY KEY CLUSTERED ([Codigo] ASC)
);
Bom iniciamos o código com um método chamado CadastrandoPessoas()
:
public void CadastrandoPessoas()
{
Collection<Pessoa> cPessoas = GetPessoasCollection();
int total = cPessoas.Count();
if (total > 0)
{
using (ConnectionSqlServer conn = new ConnectionSqlServer())
{
string info = "Sincronizando Perfis Pessoas... ";
conn.Open();
PessoasDAL pessoaDal = new PessoasDAL(conn);
pessoaDal.Delete(); // apagar depois
int op = 100 / total;
barraProgress.Value = 0;
this.escreverLabelBarraProgress(info);
foreach (Pessoa pessoa in cPessoas)
{
try
{
if (pessoaDal.Insert(pessoa) < 1)
{
}
}
catch (Exception ex)
{
MessageBox.Show("" + ex.Message);
}
lblProgress.Text = info + barraProgress.Value.ToString();
if (barraProgress.Value >= 100)
{
this.escreverLabelBarraProgress("Finalizando Processo de Pessoas!");
barraProgress.Value = 100;
continue;
}
barraProgress.Value += op;
}
barraProgress.Value = 0;
}
}
}
Despois o getcoletionspessoas
public Collection<Pessoa> GetPessoasCollection()
{
Collection<Pessoa> cPessoa = null;
PessoasDAL pessoaDal;
using (ConnectionOdbcAccess conn = new ConnectionOdbcAccess())
{
conn.Open();
pessoaDal = new PessoasDAL(conn);
cPessoa = pessoaDal.GetAllAccess();
}
return cPessoa;
}
agora o que busca o em outro banco
public Collection<Pessoa> GetAllAccess()
{
Collection<Pessoa> collection = new Collection<Pessoa>();
using (OdbcCommand cmd = this.connAccess.Find().CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT " + Attr + " FROM Pessoa WHERE Codigo = 4";
using (OdbcDataAdapter adapter = new OdbcDataAdapter(cmd))
{
DataTable tabela = new DataTable();
adapter.Fill(tabela);
foreach (DataRow d in tabela.Rows)
{
collection.Add(this.PreencherObj(d));
}
}
}
return collection;
}
temos preencher Objeto que já foi colocado acima
Bom este é meu insert:
public int Insert(Pessoa modal)
{
int ret = 0;
using (SqlCommand cmd = this.connSqlServer.Find().CreateCommand())
{
cmd.CommandType = CommandType.Text;
string Campos = "@Codigo, @DataAtualizacao, @Nome, @NomeFantasia, @DataNascimento, @TipoDoc, @CNPJ, @IdEstrangeiro, @CCE, @RG, "
+ "@Endereco, @Numero, @Complemento, @Bairro, @CEP, @CodigoMunicipio, @Cidade, @UF, @CodigoPais, @NomePais, "
+ "@DDD, @Fone, @Celular, @Email, @HomePage, @EstadoCivil, @NomeMae, @NomePai, @LocalTrabalho, @FoneTrabalho, "
+ "@Profissao, @LimiteCredito, @ClassificacaoFinanceira, @ClassificacaoVenda, @DiaVenc, @Renda, @ValorMensal, @ChkSalario, @DataContrato, @Referencia01, "
+ "@FoneReferencia01, @Referencia02, @FoneReferencia02, @Referencia03, @FoneReferencia03, @Contato1, @Contato2, @CodigoRota, @CodigoTipo, "
+ "@TipoCliente, @TipoExtrangeiro, @TipoFornecedor, @TipoFuncionario, @TipoParceiro, @TipoTecnico, @TipoProdutorRural, @TipoVendedor, @Desconto10, @Desconto01, "
+ "@Desconto02, @Desconto03, @Desconto04, @Desconto10c, @Desconto01c, @Desconto02c, @Desconto03c, @Desconto04c, @ContribuinteICMS, @OptanteSN, "
+ "@Requisicao, @Inativo, @Observacao";
cmd.CommandText = "INSERT INTO Pessoas (" + Attr + ") VALUES (" + Campos + ")";
this.preencherCampos(cmd, modal);
ret = cmd.ExecuteNonQuery();
}
return ret;
}
A variavel “Attr” é um atributo privado que tenho na classe um pouco para baixo temos o preencherCampos(), que esta aqui:
private void preencherCampos(SqlCommand cmd, Pessoa modal)
{
cmd.Parameters.Add("@Codigo", SqlDbType.BigInt).Value = modal.Codigo;
cmd.Parameters.Add("@DataAtualizacao", SqlDbType.DateTime).Value = null;
cmd.Parameters.Add("@Nome", SqlDbType.VarChar).Value = modal.Nome;
cmd.Parameters.Add("@NomeFantasia", SqlDbType.VarChar).Value = modal.NomeFantasia;
cmd.Parameters.Add("@DataNascimento", SqlDbType.Date).Value = null;
cmd.Parameters.Add("@TipoDoc", SqlDbType.VarChar, 4).Value = modal.TipoDoc;
cmd.Parameters.Add("@CNPJ", SqlDbType.VarChar, 14).Value = modal.CNPJ;
cmd.Parameters.Add("@IDEstrangeiro", SqlDbType.VarChar, 20).Value = modal.IdEstrangeiro;
cmd.Parameters.Add("@CCE", SqlDbType.VarChar, 20).Value = modal.CCE;
cmd.Parameters.Add("@RG", SqlDbType.VarChar, 20).Value = modal.RG;
cmd.Parameters.Add("@Endereco", SqlDbType.VarChar, 20).Value = modal.Endereco;
cmd.Parameters.Add("@Numero", SqlDbType.VarChar, 10).Value = modal.Numero;
cmd.Parameters.Add("@Complemento", SqlDbType.VarChar, 50).Value = modal.Complemento;
cmd.Parameters.Add("@Bairro", SqlDbType.VarChar, 50).Value = modal.Bairro;
cmd.Parameters.Add("@CEP", SqlDbType.VarChar, 8).Value = modal.CEP;
cmd.Parameters.Add("@CodigoMunicipio", SqlDbType.BigInt).Value = modal.CodigoMunicipio;
cmd.Parameters.Add("@Cidade", SqlDbType.VarChar, 50).Value = modal.Cidade;
cmd.Parameters.Add("@UF", SqlDbType.Char, 2).Value = modal.UF;
cmd.Parameters.Add("@CodigoPais", SqlDbType.VarChar, 4).Value = modal.CodigoPais;
cmd.Parameters.Add("@NomePais", SqlDbType.VarChar, 50).Value = modal.NomePai;
cmd.Parameters.Add("@DDD", SqlDbType.Int).Value = modal.DDD;
cmd.Parameters.Add("@Fone", SqlDbType.VarChar, 14).Value = modal.Fone;
cmd.Parameters.Add("@Celular", SqlDbType.VarChar, 14).Value = modal.Celular;
cmd.Parameters.Add("@Email", SqlDbType.VarChar, 60).Value = modal.Email;
cmd.Parameters.Add("@HomePage", SqlDbType.VarChar, 60).Value = modal.HomePage;
cmd.Parameters.Add("@EstadoCivil", SqlDbType.Int).Value = modal.EstadoCivil;
cmd.Parameters.Add("@NomeMae", SqlDbType.VarChar, 60).Value = modal.NomeMae;
cmd.Parameters.Add("@NomePai", SqlDbType.VarChar, 60).Value = modal.NomePai;
cmd.Parameters.Add("@LocalTrabalho", SqlDbType.VarChar, 60).Value = modal.LocalTrabalho;
cmd.Parameters.Add("@FoneTrabalho", SqlDbType.VarChar, 14).Value = modal.FoneTrabalho;
cmd.Parameters.Add("@Profissao", SqlDbType.VarChar, 30).Value = modal.Profissao;
cmd.Parameters.Add("@LimiteCredito", SqlDbType.Float).Value = modal.LimiteCredito;
cmd.Parameters.Add("@ClassificacaoFinanceira", SqlDbType.Char, 1).Value = modal.ClassificacaoFinanceira;
cmd.Parameters.Add("@ClassificacaoVenda", SqlDbType.Char, 1).Value = modal.ClassificacaoVenda;
cmd.Parameters.Add("@DiaVenc", SqlDbType.Int).Value = modal.DiaVenc;
cmd.Parameters.Add("@Renda", SqlDbType.Float).Value = modal.Renda;
cmd.Parameters.Add("@ValorMensal", SqlDbType.Float).Value = modal.ValorMensal;
cmd.Parameters.Add("@ChkSalario", SqlDbType.Char, 1).Value = modal.ChkSalario;
cmd.Parameters.Add("@DataContrato", SqlDbType.DateTime).Value = null;
cmd.Parameters.Add("@Referencia01", SqlDbType.VarChar, 50).Value = modal.Referencia01;
cmd.Parameters.Add("@FoneReferencia01", SqlDbType.VarChar, 14).Value = modal.FoneReferencia01;
cmd.Parameters.Add("@Referencia02", SqlDbType.VarChar, 50).Value = modal.Referencia02;
cmd.Parameters.Add("@FoneReferencia02", SqlDbType.VarChar, 14).Value = modal.FoneReferencia02;
cmd.Parameters.Add("@Referencia03", SqlDbType.VarChar, 50).Value = modal.Referencia03;
cmd.Parameters.Add("@FoneReferencia03", SqlDbType.VarChar, 14).Value = modal.FoneReferencia03;
cmd.Parameters.Add("@Contato1", SqlDbType.VarChar, 50).Value = modal.Contato1;
cmd.Parameters.Add("@Contato2", SqlDbType.VarChar, 50).Value = modal.Contato2;
cmd.Parameters.Add("@CodigoRota", SqlDbType.BigInt).Value = modal.CodigoRota;
cmd.Parameters.Add("@CodigoTipo", SqlDbType.BigInt).Value = modal.CodigoTipo;
cmd.Parameters.Add("@TipoCliente", SqlDbType.Int).Value = modal.TipoCliente;
cmd.Parameters.Add("@TipoExtrangeiro", SqlDbType.Int).Value = modal.TipoExtrangeiro;
cmd.Parameters.Add("@TipoFornecedor", SqlDbType.Int).Value = modal.TipoExtrangeiro;
cmd.Parameters.Add("@TipoFuncionario", SqlDbType.Int).Value = modal.TipoFuncionario;
cmd.Parameters.Add("@TipoParceiro", SqlDbType.Int).Value = modal.TipoParceiro;
cmd.Parameters.Add("@TipoTecnico", SqlDbType.Int).Value = modal.TipoTecnico;
cmd.Parameters.Add("@TipoProdutorRural", SqlDbType.Int).Value = modal.TipoProdutorRural;
cmd.Parameters.Add("@TipoVendedor", SqlDbType.Int).Value = modal.TipoVendedor;
cmd.Parameters.Add("@Desconto10", SqlDbType.Float).Value = modal.Desconto10;
cmd.Parameters.Add("@Desconto01", SqlDbType.Float).Value = modal.Desconto01;
cmd.Parameters.Add("@Desconto02", SqlDbType.Float).Value = modal.Desconto02;
cmd.Parameters.Add("@Desconto03", SqlDbType.Float).Value = modal.Desconto03;
cmd.Parameters.Add("@Desconto04", SqlDbType.Float).Value = modal.Desconto04;
cmd.Parameters.Add("@Desconto10c", SqlDbType.Float).Value = modal.Desconto10c;
cmd.Parameters.Add("@Desconto01c", SqlDbType.Float).Value = modal.Desconto01c;
cmd.Parameters.Add("@Desconto02c", SqlDbType.Float).Value = modal.Desconto02c;
cmd.Parameters.Add("@Desconto03c", SqlDbType.Float).Value = modal.Desconto03c;
cmd.Parameters.Add("@Desconto04c", SqlDbType.Float).Value = modal.Desconto04c;
cmd.Parameters.Add("@ContribuinteICMS", SqlDbType.Int).Value = modal.ContribuinteICMS;
cmd.Parameters.Add("@OptanteSN", SqlDbType.Int).Value = modal.OptanteSN;
cmd.Parameters.Add("@Requisicao", SqlDbType.Char, 1).Value = modal.Requisicao;
cmd.Parameters.Add("@Inativo", SqlDbType.Int).Value = modal.Inativo;
cmd.Parameters.Add("@Observacao", SqlDbType.Text).Value = modal.Observacao;
}
Aonde você está colocando
cmd.Parameters.Add("@DataAtualizacao", SqlDbType.DateTime).Value = null;
coloque:
cmd.Parameters.Add("@DataAtualizacao", SqlDbType.DateTime).Value = DBNull.Value;
Nessa código extenso eu vi isso … quando usamos NULL
no banco existe a constante DBNull.Value
que tem o valor corresponde a NULL
Lembre-se também da resposta que eu dei antes dessa tem um código que vai eliminar a maioria dos problemas!
Cara show de bola… vlw mesmo está me ajudando demais…