Erro de Parameterize query

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!

1 curtida

Cara show de bola… vlw mesmo está me ajudando demais…

1 curtida