Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2011
    residenza
    Arezzo
    Messaggi
    194

    [C#] Query su db Access con OleDbConnection con filtro su data

    Salve a tutti, non riesco a far funzionare questa query

    SELECT * FROM PRODUZ WHERE TIPO='R' OR TIPO='R/S' AND DATORD BETWEEN #" + inizio + "# AND #" + fine + "# ORDER BY DATORD DESC

    dove inizio e fine sono due date in formato DateTime dd/MM/yyyy 00:00:00

    La query non restituisce errori ma non funziona, non filtra in base alle date richieste, sicuramente è questione di sitassi diversa o di un cast da fare... ma non ne vengo a capo!
    Qualcuno riesce ad aiutarmi???
    Grazie
    Riccardo Sadocchi
    Microsoft MCP C#

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    puoi vedere se va come da esempio? (non ho controllato)
    ([TIPO] = 'T' OR [TIPO] = 'E') AND [DATA_ORA] Between #01/20/2016 00:00:00# AND #03/25/2016 00:00:00#

    la data è nel formato americano e ho messo la condizione or tra parentesi
    Pietro

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2011
    residenza
    Arezzo
    Messaggi
    194
    Ciao e grazie della risposta, ho provato ma non funziona.
    Inoltre le parentesi non sono un problema (ad esempio facendo la query con la sola condizione or funziona benissimo).
    Per le date non capisco, non da errori ma mi restituisce date che non sono assolutamente nel range richiesto...

    Adesso ho provato aggiungendo Parameters così

    codice:
    string query = "SELECT * FROM PRODUZ WHERE TIPO='R' OR TIPO='R/S' AND DATORD BETWEEN ? AND ? ORDER BY DATORD DESC";            
    
    OleDbConnection con = new OleDbConnection(conString);
    OleDbCommand cmd = new OleDbCommand(query, con);
    
    // aggiungo i parametri
    cmd.Parameters.Add("@p1", OleDbType.Date).Value = inizio; // es. 01/06/2016 00:00:00
    cmd.Parameters.Add("@p2", OleDbType.Date).Value = fine; // es. 21/06/2016 00:00:00
    
    DataTable result = new DataTable();
    OleDbDataReader reader = null;
    
    try
    {
        con.Open();
        reader = cmd.ExecuteReader();
    
        if (reader.HasRows) { result.Load(reader); }
        else { MessageBox.Show("La query non ha prodotto risultati."); }
    }
    catch (OleDbException ex)
    { MessageBox.Show("Errore nella connessione al DataBase! " + ex.ToString()); }
    finally
    {
        reader.Close();
        con.Close();
    }            
    
    vistaDati.DataSource = reader;

    Ma non mi restituisce nulla, nemmeno un errore!!!!!
    Riccardo Sadocchi
    Microsoft MCP C#

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    come hai definito inizio e fine? sono date o stringhe?
    Pietro

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2011
    residenza
    Arezzo
    Messaggi
    194
    sono due DataTime, comunque non era quello il problema, ho fatto alcune correzioni, la più importante è che tentavo di caricare in un DataGridView un oggetto OleDbDataReader (reader) invece che un DataTable (result)!!!

    Questo è il codice funzionante:

    codice:
    string query = "SELECT * FROM PRODUZ WHERE (TIPO='R' OR TIPO='R/S') AND DATORD BETWEEN @inizio AND @fine ORDER BY DATORD DESC";
    
    OleDbConnection con = new OleDbConnection(conString);
    OleDbCommand cmd = new OleDbCommand();
    
    cmd.Connection = con;
    cmd.CommandText = query;
    
    cmd.Parameters.AddWithValue("@inizio", inizio);
    cmd.Parameters.AddWithValue("@fine", fine);
    
    DataTable result = new DataTable();
    OleDbDataReader reader = null;
    
    try
    {
        con.Open();
        reader = cmd.ExecuteReader();
    
        if (reader.HasRows) { result.Load(reader); }
        else { MessageBox.Show("La query non ha prodotto risultati."); }
    }
    catch (OleDbException ex)
    { MessageBox.Show("Errore nella connessione al DataBase! " + ex.ToString()); }
    finally
    {
        reader.Close();
        con.Close();
    }
               
    vistaDati.DataSource = result;
    Riccardo Sadocchi
    Microsoft MCP C#

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.