locked
estou usando c.sharp e sqlserver e fiz uma consulta no banco so que tenho que converter OQUE a consulta me retorna para o tipo detetime alguém me ajuda segue o código abaixo RRS feed

  • Pergunta

  •     
                string slc = ("select data from produtos"); TENHO QUE CONVERTER  ESSE SELECT PARA DATETIME

                SqlCommand comand = new SqlCommand(slc, sqlcon);
             
                DateTime dat  = Convert.ToDateTime("PARA PASSAR AQUI DENTRO PARA FZ A COMPARAÇAO");

                if (dat.Date == DateTime.Now.Date)
                {
                    MessageBox.Show("venceu");
                }
                else
                    MessageBox.Show("nao venceu");

                return;
            }
        }
    sexta-feira, 3 de março de 2017 03:17

Respostas

  • Link com o projeto; https://drive.google.com/open?id=0B6DfxCFJ7_bPMVJ4V2wwMEhFY0k 

    Enviei por email também.

    Obrigado

    Veja ai como deve ficar AQUI

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    • Sugerido como Resposta Mr. GMSOFT terça-feira, 7 de março de 2017 11:41
    • Marcado como Resposta Robson William Silva terça-feira, 7 de março de 2017 12:26
    terça-feira, 7 de março de 2017 11:41
  • Veja
    private void btnvalidar_Click(object sender, EventArgs e) 
    { 
       List<produto> produtos = new List<produto>();
                SqlConnection con = ConnectionFactory();
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.Connection = con;
                    con.Open();
                    cmd.CommandText = "select codigo,produto,data from produto";
                    SqlDataReader reader = cmd.ExecuteReader();
                    int contVencidos = 0;
                    while (reader.Read())
                    {
                        DateTime dat = Convert.ToDateTime(reader["data"].ToString());
                        if (dat.Date == DateTime.Now.Date)
                        {
                            //Adiciona os produtos vencidos em uma lista
                            produtos.Add(new produto
                            {
                                codigo = Convert.ToInt32(reader["codigo"].ToString()),
                                nome = reader["produto"].ToString(),
                                data = Convert.ToDateTime(reader["data"].ToString())
                            });
                            contVencidos++;
                        }
                    }
    
                    MessageBox.Show(string.Format(" {0} PRODUTOS VENCIDO ", contVencidos));
                    //Lê todos os produtos vencidos
                    foreach (produto prod in produtos)
                    {
                        MessageBox.Show(string.Format("Codigo: {0} Produto {1} Vencimento: {2}",prod.codigo,prod.produto,prod.data));
                    }
                    
                    if (contVencidos == 0)
                    {
                        MessageBox.Show(" nada vencido "); con.Close();
                    }
                }
            }
    }        
    
            //Classe de Produtos
            public class produto
            {
                public int codigo { get; set; }
                public string nome { get; set; }
                public DateTime data { get; set; }
            }
    


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quinta-feira, 9 de março de 2017 00:19

Todas as Respostas

  • Tente dessa forma:

            public bool ValidaData()
            {
                SqlConnection conn = new SqlConnection("sua string de conexao com o banco");
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.Connection = conn;
                    cmd.CommandText = "SELECT data from produto";
                    SqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        DateTime dat = Convert.ToDateTime(reader["data"].ToString());
    
                        if (dat.Date == DateTime.Now.Date)
                        {
                            MessageBox.Show("venceu");
                            return true;
                        }
                        else
                            MessageBox.Show("nao venceu");
                    }
                    conn.Close();
                }
    
                return false;
            }


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    • Sugerido como Resposta Rodrigo CdS sexta-feira, 3 de março de 2017 11:33
    sexta-feira, 3 de março de 2017 11:28
  • O que não deu certo, por que testei aqui esse mesmo código e funciona, mostre o erro se ocorreu

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sexta-feira, 3 de março de 2017 16:14
  •   private void button2_Click(object sender, EventArgs e)
            {

                
                {
                    public bool ValidaData() DA ERRO NA PALAVRA PUBLIC  ME AJUDA OBS ESTOU NO WINDOWS FORM
                    {

                        SqlConnection con = new SqlConnection();
                        con.ConnectionString = @"Server = DESKTOP-6L87V8S\MYSQL; Database = controledeestoque;Trusted_Connection = True";
                        using (SqlCommand cmd = new SqlCommand())
                        {
                            cmd.Connection = con;
                            cmd.CommandText = "SELECT data from produto";
                            SqlDataReader reader = cmd.ExecuteReader();
                            while (reader.Read())
                            {
                                DateTime dat = Convert.ToDateTime(reader["data"].ToString());

                                if (dat.Date == DateTime.Now.Date)
                                {
                                    MessageBox.Show("venceu");
                                    return true;
                                }
                                else
                                    MessageBox.Show("nao venceu");
                            }
                            con.Close();
                        }

                        return false;

                    }
                }
            }
            }

            }
    • Editado caldeiraa sexta-feira, 3 de março de 2017 16:52
    sexta-feira, 3 de março de 2017 16:51
  • É por que você copiou o código que passei sem entender o que eu tinha feito, o erro ocorria por que você estava usando a função dentro de outra, teste ai:

    private void button2_Click(object sender, EventArgs e)
            {
            SqlConnection con = new SqlConnection();
            con.ConnectionString = @"Server = DESKTOP-6L87V8S\MYSQL; Database = controledeestoque;Trusted_Connection = True";
                        using (SqlCommand cmd = new SqlCommand())
                        {
                            cmd.Connection = con;
                            cmd.CommandText = "SELECT data from produto";
                            SqlDataReader reader = cmd.ExecuteReader();
                            while (reader.Read())
                            {
                                DateTime dat = Convert.ToDateTime(reader["data"].ToString());
                                if (dat.Date == DateTime.Now.Date)
                                {
                                    MessageBox.Show("venceu");
                                    return true;
                                }
                                else
                                    MessageBox.Show("nao venceu");
                            }
    con.Close();
                        }
               }


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sexta-feira, 3 de março de 2017 17:08
  • Vi agora, você esta usando qual banco de dados?

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sexta-feira, 3 de março de 2017 17:08
  • sql server management studio
    sexta-feira, 3 de março de 2017 17:16
  • Tem que converter para o padrão de seu computador:

    SELECT CONVERT(VARCHAR(10),data, 101) as data from produto

    O ideal é que você inspecione o valor que é retornado

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sexta-feira, 3 de março de 2017 17:24
  • seu código esta certo mais tem que ter somente uma data no banco ou se outras datas  diferentes forem inserida em seguida da erro.pode me ajudar resolver esse conflito .obrigado
    • Editado caldeiraa sexta-feira, 3 de março de 2017 18:17
    sexta-feira, 3 de março de 2017 18:04
  • seu código esta certo mais tem que ter somente uma data no banco ou se outras datas  diferentes forem inserida em seguida da erro.pode me ajudar resolver esse conflito 

    • Editado caldeiraa sexta-feira, 3 de março de 2017 18:17
    sexta-feira, 3 de março de 2017 18:05
  • Se for somente uma data basta colocar top(1)

    SELECT top(1) CONVERT(VARCHAR(10),data, 101) as data from produto


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sexta-feira, 3 de março de 2017 20:40
  • se eu deixar só uma data no banco funciona compara direito.mais se eu cadastrar 3 ou mais datas não da certo fala que não a produtos vencidos sendo que não verdade tem.queria que o software  percorresse  todas as datas na coluna data da tabela produtos e depois mostrar se tem data == a date time .porque  o software não esta fazendo isso.obrigado

     SqlConnection con = new SqlConnection();
                    con.ConnectionString = @"Server = DESKTOP-6L87V8S\MYSQL; Database = controledeestoque;Trusted_Connection = True";
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        cmd.Connection = con;
                        con.Open();
                        cmd.CommandText = "SELECT data from produto";
                        SqlDataReader reader = cmd.ExecuteReader();
                        while (reader.Read())
                        {
                            DateTime dat = Convert.ToDateTime(reader["data"].ToString());
                            if (dat.Date == DateTime.Now.Date)
                            {  
                                MessageBox.Show("produtos vencidos");
                           
                            }
                            else
                                MessageBox.Show("nao há produtos vencidos");
                            return;
                        }
                        con.Close();
                    }       }
    sexta-feira, 3 de março de 2017 22:00
  • Tente dessa forma:

            public bool ValidaData()
            {
                SqlConnection conn = new SqlConnection("sua string de conexao com o banco");
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.Connection = conn;
                    cmd.CommandText = "SELECT data from produto";
                    SqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        DateTime dat = Convert.ToDateTime(reader["data"].ToString());
    
                        if (dat.Date == DateTime.Now.Date)
                        {
                            MessageBox.Show("venceu");
                            return true;
                        }
                        else
                            MessageBox.Show("nao venceu");
                    }
                    conn.Close();
                }
    
                return false;
            }


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    Se é para percorrer o codigo é esse ai acima

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    domingo, 5 de março de 2017 20:09
  • MAIS O CODIGO VALIDA SOMENTE A PRIMEIRA DATA CADASTRADA NO BANCO.EXEMPLO SE VC CRIA O BANCO NOVAMENTE E CADASTRA UMA DATA QUE NAO ESTA VENCENDO AI VC ESCUTA O CODIGO E ELE FALA QUE NAO TA VENCENDO.AI SE VC CADASTRA UMA QUE ESTAR VENCENDO E ESCUTAR O CODIGO VAI FALAR QUE NAO HA PRODUTOS VENCIDOS.PARECE QUE A CONDIÇÃO NAO PERCORRE TODAS AS DATAS DO BANCO.PODE ME AJUDA POR FAVOR SERIO ME AJUDA POR FAVOR. 
    segunda-feira, 6 de março de 2017 13:42
  • Mande para mim que eu olho o que pode ser:
    gmsoft.informatica@gmail.com

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    segunda-feira, 6 de março de 2017 16:30
  • Link com o projeto; https://drive.google.com/open?id=0B6DfxCFJ7_bPMVJ4V2wwMEhFY0k 

    Enviei por email também.

    Obrigado

    segunda-feira, 6 de março de 2017 21:42
  • Vou olhar o seu código e retorno

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    terça-feira, 7 de março de 2017 11:23
  • Link com o projeto; https://drive.google.com/open?id=0B6DfxCFJ7_bPMVJ4V2wwMEhFY0k 

    Enviei por email também.

    Obrigado

    Veja ai como deve ficar AQUI

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    • Sugerido como Resposta Mr. GMSOFT terça-feira, 7 de março de 2017 11:41
    • Marcado como Resposta Robson William Silva terça-feira, 7 de março de 2017 12:26
    terça-feira, 7 de março de 2017 11:41
  • obrigado
    terça-feira, 7 de março de 2017 12:17
  • ta dando dois  bugs no software O PRIMEIRO bug. ele so avalia a primeira data que for cadastrada NO BANCO pode ter varias datas vencidas que o software fala que tem so uma data vencida.ou se a primeira data cadastrada não estiver vencida e depois castrar varias  datas vencidas ele fala que não tem data vencida,parece que o software não confere todas as datas no banco.SEGUNDO erro nessa condição
                    while (reader.Read()) da esse erro exceção sem tratamento System.InvalidOperationException: 'Tentativa inválida de chamar Read quando o leitor estava fechado.'.  CONSIDERAÇÕES VOCÊ JA ME AJUDOU MUITO NA EVOLUÇÃO DO SOFTWARE.MAIS ME AJUDE A TRATAR OS BUGS.POR FAVOR 
    • Editado caldeiraa terça-feira, 7 de março de 2017 14:21
    terça-feira, 7 de março de 2017 14:08
  • A própria mensagem já informa o problema, você não esta abrindo a conexão para poder ler os dados, tenha certeza absoluta que esta trazendo os dados.

    Segunda é que coloquei o contador para informar quantas ocorrências de vencimento tinhas e coloquei uma observação para você "Não basta apenas verificar o que esta vencido mais sim o que esta vendido para auxiliar o usuário da identificação".

    Mostre o print do erro quando ocorre


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    terça-feira, 7 de março de 2017 14:43
  •   muito obrigado estou muito feliz esta dando certo,mais ele ta indo em data por data e comprando se estar vencida  ai aparece exemplo data vencida então clico em ok ai valida a outra data  e assim por diante ate percorre todos o banco DEPENDENDO DA QUANTIDADE DE PRODUTOS CADASTRADOS demoraria muito  e no final mostra a quantidade de vencidas .assim muito obrigado msm.mais tem jeito de me ajudar so por performacer mesmo tem  comparar todas as datas primeiro e depois me falar se tem tintas vencida ou não e mostrar a quantidade de tintas vencidas asssim seria mais pratico.MUITO OBRIGADO DEUS ABENÇOE.
    terça-feira, 7 de março de 2017 15:05
  • Vai demorar mesmo se ficar mostrando a mensagem, por isso que te enviei com um contador de ocorrencias vencidas e só mostrar no final do While

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    terça-feira, 7 de março de 2017 15:25
  • ata muito obrigado parei de mostrar a mensagem ficou menos demorado
    terça-feira, 7 de março de 2017 19:53
  • Estava precisando desse código também,só que ao invés de retornar só a quantidade de produtos vencidos eu precisaria do nome e da data do produto. Gostaria de saber se tem como enviar essa informação pro e-mail da pessoa que vai gerenciar o estoque.

    Obrigada!

    terça-feira, 7 de março de 2017 22:26
  • Eu ja tinha colocado essa observação no código que te enviei a respeito da informação completa a ser entregue ao usuario.

    Pode enviar por e-mail via smtp, para isso verifique se seu provedor de internet libera o envio por FTP alguns estão fazendo o bloqueio.


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 8 de março de 2017 12:09
  • Como que eu faço pra concatenar pra mostrar todos os dados do produto vencido? Eu preciso que mostre os dados pra que seja possível identificar qual é o produto que está vencido ao invés de só quantos estão vencidos. 
    quarta-feira, 8 de março de 2017 13:33
  • Onde tem o contador, cria uma List<Produto> e vai adicionando na lista e depois para ler os dados adicionar após o While é só usar um foreach(Supondo que você tenha uma classe produtos para desserializar)

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 8 de março de 2017 14:07
  • O código que eu tenho é o que vc disponibilizou está resolvendo meu problema mais preciso que ele traga o produto  é o código do produto. Tenho uma tabela produtos com campo produto tipo varchar.codigo tipo int.data tipo datetime. Quando a data do produto vencer trazer a quantidade de produtos e todas as informações dos produtos. Me ajuda por favor não estou conseguindo.

    private void btnvalidar_Click(object sender, EventArgs e) { SqlConnection con = ConnectionFactory(); using(SqlCommand cmd = new SqlCommand())

    { cmd.Connection = con;

    con.Open();

    cmd.CommandText = "select * from produto";

    SqlDataReader reader = cmd.ExecuteReader();

    int contVencidos = 0; while (reader.Read())

    { DateTime dat = Convert.ToDateTime(reader["data"].ToString());

    if (dat.Date == DateTime.Now.Date) { contVencidos++; } }

    MessageBox.Show(string.Format(" {0} PRODUTOS VENCIDO ", contVencidos));

    if (contVencidos == 0) { MessageBox.Show(" nada vencido "); con.Close(); } } }


    Coloquei um pedaço do código aqui. Me ajude por favor!!! Obrigada!!!

    • Editado Gabriela29 quarta-feira, 8 de março de 2017 22:58
    quarta-feira, 8 de março de 2017 22:45
  • Veja
    private void btnvalidar_Click(object sender, EventArgs e) 
    { 
       List<produto> produtos = new List<produto>();
                SqlConnection con = ConnectionFactory();
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.Connection = con;
                    con.Open();
                    cmd.CommandText = "select codigo,produto,data from produto";
                    SqlDataReader reader = cmd.ExecuteReader();
                    int contVencidos = 0;
                    while (reader.Read())
                    {
                        DateTime dat = Convert.ToDateTime(reader["data"].ToString());
                        if (dat.Date == DateTime.Now.Date)
                        {
                            //Adiciona os produtos vencidos em uma lista
                            produtos.Add(new produto
                            {
                                codigo = Convert.ToInt32(reader["codigo"].ToString()),
                                nome = reader["produto"].ToString(),
                                data = Convert.ToDateTime(reader["data"].ToString())
                            });
                            contVencidos++;
                        }
                    }
    
                    MessageBox.Show(string.Format(" {0} PRODUTOS VENCIDO ", contVencidos));
                    //Lê todos os produtos vencidos
                    foreach (produto prod in produtos)
                    {
                        MessageBox.Show(string.Format("Codigo: {0} Produto {1} Vencimento: {2}",prod.codigo,prod.produto,prod.data));
                    }
                    
                    if (contVencidos == 0)
                    {
                        MessageBox.Show(" nada vencido "); con.Close();
                    }
                }
            }
    }        
    
            //Classe de Produtos
            public class produto
            {
                public int codigo { get; set; }
                public string nome { get; set; }
                public DateTime data { get; set; }
            }
    


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quinta-feira, 9 de março de 2017 00:19
  • Nossa, muito obrigada mesmo! Vc me ajudou bastante! Obrigada mesmo!!! Deus abençoe!
    quinta-feira, 9 de março de 2017 12:40
  • nossa você e muito bom mesmo e.conseguir melhorar meu software seguindo  as suas dicas .você tem dicas para ser um bom desenvolvedor? um dia quero chegar ao seu nível e ajudar as pessoas parabéns.obrigado
    quinta-feira, 9 de março de 2017 14:05
  • Boa tarde,

    Estou com um problema, o projeto tem uma parte que envia e-mail direto do app. Só que eu preciso digitar todas as informações pra poder enviar. Existe alguma forma de essas informações serem preenchidas previamente? No caso, o destinatário do e-mail e o assunto seriam sempre os mesmos. Já a informação no corpo do e-mail precisaria ser buscada direto do banco de dados a cada e-mail que fosse enviado. No caso, essa informação seria os produtos que estiverem vencidos. Essa listagem precisava ser enviada para o corpo do e-mail e o e-mail ser enviado automaticamente ao responsável.

    Como que eu consigo fazer isso??? Já tentei de várias maneiras mas não consegui.

    Alguém pode me ajudar por favor???? Obrigada!

    sexta-feira, 10 de março de 2017 16:50
  • ola tudo bem? sera que podia me ajudar  estou usando o código acima para  controlar a validade envés da condição ser somente 

    if (dat.Date <= DateTime.Now.Date) que compara se tem data vencida ou esta vencendo no atual dia

    queria que comparasse 

    if (dat.Date <= DateTime.Now.Date||DateTime.Now.Date + 4dias ou menos==data do produto que ira vencer)

     se existem datas com que ira vencer daqui 4 dias ou menos

    pode me ajudar por favor?

    Obrigado!





    • Editado caldeiraa sábado, 11 de março de 2017 03:29
    sábado, 11 de março de 2017 00:51
  • Sempre cative a sua curiosidade em saber como as coisas funcionam, com certeza isso ajuda muito

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sábado, 11 de março de 2017 10:38
  • if (dat.Date <= DateTime.Now.Date||DateTime.Now.Date.AddDays(4)


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sábado, 11 de março de 2017 10:40
  • O ideal é que esta crie um form para o envio ou mantenha tudo no banco de dados (em uma tabela de email e suas configurações inclusive a padrão) 

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sábado, 11 de março de 2017 10:41
  • OBRIGADO
    sábado, 11 de março de 2017 13:22
  • OBRIGADO. COMO SEMPRE SUA DICA DE DE COMO FAZER DEU CERTINHO
    sábado, 11 de março de 2017 13:24
  • Por nada ;)

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    sábado, 11 de março de 2017 23:58