基本上我试图根据3个条件从我的数据库中过滤不同的时间和温度。
(列)UnitNo = txtUnit.Text(文本框中的用户输入)
(开始日期)日期> = ComboStart.Text(为第一个组合框选择的用户)
(结束日期)日期< = ComboEnd.Text(为第二个组合框选择的用户)
我知道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;
答案 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建议的参数化查询。