none
Select com Between usando DateTimePicker RRS feed

  • Pergunta

  • Bom dia, sou iniciante em C# e não estou conseguindo fazer uma consulta básica.

    Tenho uma tabela no bando de dados SQL Server com formato datetime, e estou tentando fazer a seguinte consulta no c#:

    "SELECT U.COD_OS AS 'Cód', UU.DataIniOs 'Data OS' ,UU.ReqCompNum, UU.ReqCompStat, UU.PedCompNum, UU.PedValTot FROM USER_ITEM_REQ_MANUTENCAO U, USER_ITEM_REQ_MANUTENCAO_VAL UU WHERE U.ID = UU.ID AND UU.DataIniOs BETWEEN '%" + dtInicial.Text + "%' AND '%" + dtFinal.Text + "%'"

    Quando vou executar o botão de pesquisa aparece o seguinte erro: Conversion failed when converting date and/or time from character string.

    OBS: para a inserção dessa data na tabela estou convertendo corretamente e está inserindo normalmente.

    Como faço para converter no Between, apenas para pesquisa?

    Desde já grato!

    terça-feira, 6 de outubro de 2015 13:35

Respostas

  • Between não usa % isso é somente para like

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

    • Marcado como Resposta fsm1993 quarta-feira, 7 de outubro de 2015 11:25
    terça-feira, 6 de outubro de 2015 19:18

Todas as Respostas

  • Olá, bom dia!

    Você tem que converter os valoresantes de rodar a query no banco.

    Tenta converter assim:

    DateTime dataIni = Convert.ToDateTime(dtInicial.Text);

    DateTime dataFim = Convert.ToDateTime(dtFinal.Text);

    Abraço.

    Bernard Johnson.

    terça-feira, 6 de outubro de 2015 14:11
  • tente isso

      private void button2_Click(object sender, EventArgs e)
            {
                //converte o valor de data para string,ja no formado do banco dd/mm/yy hh:mm:ss
                string _inicial = this.dateTimePicker1.Value.ToShortDateString();
                string _final = this.dateTimePicker2.Value.ToShortDateString();
    
                //select com parametros @
                string _select = "SELECT U.COD_OS AS 'Cód', UU.DataIniOs 'Data OS' ,UU.ReqCompNum, UU.ReqCompStat, UU.PedCompNum, UU.PedValTot FROM USER_ITEM_REQ_MANUTENCAO U, USER_ITEM_REQ_MANUTENCAO_VAL UU WHERE U.ID = UU.ID AND UU.DataIniOs BETWEEN @inicial AND @final";
    
                using(SqlCommand _cmd = new SqlCommand(_select,new SqlConnection("")))
                {
                    //criei os parametros e atribui os valores à eles,
                    //evite ficar concatenando string para fazer um select
                    //isso evita com que seu sistema fique vulneravel à injeção de querys
                    _cmd.Parameters.Add("@inicial", SqlDbType.DateTime).Value = _inicial;
                    _cmd.Parameters.Add("@final", SqlDbType.DateTime).Value = _final;
    
                    _cmd.ExecuteNonQuery();
                }
            }


    Microsoft Technology Associate (MTA)


    • Editado Eduardo xUni terça-feira, 6 de outubro de 2015 14:17
    terça-feira, 6 de outubro de 2015 14:13
  • Primeiro me mostra qual o formato esta retornando do DateTimerPicker.

    Tente converter com:
    DateTime data = DateTime.ParseExact(dateString, formato, CultureInfo);


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

    terça-feira, 6 de outubro de 2015 15:08
  • Obrigado, mas ainda não deu certo...

    Estou usando dessa forma, e nesses formato o DateTimiPicker.

    1. Format: Custom
    2. CustomFormat: dd-MM-yyyy
    terça-feira, 6 de outubro de 2015 18:27
  • continua o mesmo problema?

    Microsoft Technology Associate (MTA)

    terça-feira, 6 de outubro de 2015 18:48
  • Sim, olhe como estou fazendo:

     private void button1_Click(object sender, EventArgs e)
            {
                 SqlConnection conn = new SqlConnection(@"SERVER=SERVER;DATABASE=Oficial115;UID=sa;PASSWORD=634zambow6pic08;");


                SqlDataAdapter sda = new SqlDataAdapter("SELECT U.COD_OS AS 'Cód', Convert(VarChar(20), UU.DataIniOs) as 'Data OS', UU.ReqCompNum, UU.ReqCompStat, UU.PedCompNum, UU.PedValTot FROM USER_ITEM_REQ_MANUTENCAO U, USER_ITEM_REQ_MANUTENCAO_VAL UU WHERE U.ID = UU.ID AND UU.DataIniOs BETWEEN '%" + data1 + "%' AND '%" + data2 + "%'", conn);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                dgvRequisicao.DataSource = dt;

    terça-feira, 6 de outubro de 2015 18:56
  • Between não usa % isso é somente para like

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

    • Marcado como Resposta fsm1993 quarta-feira, 7 de outubro de 2015 11:25
    terça-feira, 6 de outubro de 2015 19:18
  • Puxa vida cara era isso mesmo, nem estava me atentando para esse detalhe.

    Valeu mesmo....Obrigado!

    • Marcado como Resposta fsm1993 quarta-feira, 7 de outubro de 2015 11:25
    • Não Marcado como Resposta fsm1993 quarta-feira, 7 de outubro de 2015 11:25
    quarta-feira, 7 de outubro de 2015 11:24