过滤

时间:2015-06-10 07:41:10

标签: c# filter

基本上我试图根据3个条件从我的数据库中过滤不同的时间和温度。

  1. (列)UnitNo = txtUnit.Text(文本框中的用户输入)

  2. (开始日期)日期> = ComboStart.Text(为第一个组合框选择的用户)

  3. (结束日期)日期< = ComboEnd.Text(为第二个组合框选择的用户)

  4. 我知道WHERE子句是错误的...有人可以帮忙吗?

    提前致谢

    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 个答案:

答案 0 :(得分:4)

您必须使用参数化查询,例如

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

然后添加如下参数:

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));

答案 1 :(得分:1)

试试这个

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

您需要将控件中的值连接到该查询中。 这将解决您的错误,但它不被视为使用这样的SQL的最佳做法。请考虑像Andy建议的参数化查询。