3 condition in WHERE clause for filtering

1k Views Asked by At

Basically I am trying to filter the distinct time and temperature from my database based on 3 condition.

  1. (column) UnitNo = txtUnit.Text (what user input in textbox)

  2. (Start date) Date >=ComboStart.Text (what user selected for 1st combobox)

  3. (End date) Date <=ComboEnd.Text (what user selected for 2nd combobox)

I know the WHERE clause is wrong.. could someone please help?

Thanks in advance

string tableName = "Data3";
string query = "SELECT DISTINCT Time,Temperature FROM Data3 WHERE (UnitNo = txtUnit.Text) AND (Date >= ComboStart.Text) AND (Date<=ComboEnd.Text)";


OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\acer\Documents\Database3.accdb");
OleDbDataAdapter ada = new OleDbDataAdapter(query, con);

DataSet set = new DataSet(); 
ada.Fill(set, tableName);  

DataTable tab = new DataTable();
tab = set.Tables["Data3"];  

dataGridViewDisplay.DataSource = tab;  
2

There are 2 best solutions below

4
On BEST ANSWER

You have to use parameterized query like

string query = 
  @"SELECT DISTINCT Time, Temperature 
    FROM Data3 
    WHERE (UnitNo = ?)
    AND   (Date >= ?)
    AND   (Date <= ?)";

And then add parameters like:

ada.SelectCommand.Parameters.Add(new OleDbParameter("Unit", txtUnit.Text));
ada.SelectCommand.Parameters.Add(new OleDbParameter("DateFrom", ComboStart.Text));
ada.SelectCommand.Parameters.Add(new OleDbParameter("DateTo", ComboEnd.Text));
5
On

Try this

string query = "SELECT  DISTINCT " +
                           "         Time," +
                           "         Temperature " +
                           " FROM    Data3 " +
                           " WHERE  (UnitNo = " + txtUnit.Text + ")"+
                           " AND    (Date >= '" + ComboStart.Text +"')" +
                           " AND    (Date <= '" + ComboEnd.Text + "')";

You need to concatenate values from controls into that query. This will solve your error, but it's not considered as best practice to use SQL like this. Please consider parameterized query like Andy suggested.