获取错误:查询输入必须至少包含一个表或查询

时间:2014-01-29 16:53:04

标签: c# oledb

我收到此错误:查询输入必须至少包含一个表或查询 我的代码是:

    using (OleDbConnection myCon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=timetabledata.accdb")){                       
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;
                           string q = "INSERT INTO timehourly (teacherid,subjectid) Values ('@teacherID','@subjid')" + " WHERE hour='@i' AND dayid='@ds'";
                          cmd.Parameters.AddWithValue("@teacherID", Convert.ToInt32(teacher_combo.SelectedValue).ToString());
                           cmd.Parameters.AddWithValue("@subjid",  Convert.ToInt32(subject_combo.SelectedValue).ToString());
                           cmd.Parameters.AddWithValue("@i",i.ToString());
cmd.Parameters.AddWithValue("@ds",ds.Tables[0].Rows[k].ItemArray[0].ToString());
                            cmd.CommandText = q;
        cmd.Connection = myCon;
        myCon.Open();
        cmd.ExecuteNonQuery();
        System.Windows.Forms.MessageBox.Show("successfully added", "Caption", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);}

1 个答案:

答案 0 :(得分:2)

您需要从参数声明中删除撇号。还要验证传递给查询的值中是否存在数据。在添加参数之前,还要指定CommandText

此外,您可以在OleDbCommand语句中将using包装在IDisposable语句中,同时实现INSERT

然后,您尝试使用WHERE子句执行INSERT,这将无效。

UPDATE语句实际上是在表中“插入”一行,不能在已有行的位置插入行。

您要找的是using (OleDbConnection myCon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=timetabledata.accdb")) using (OleDbCommand cmd = new OleDbCommand()) { cmd.CommandType = CommandType.Text; string q = "UPDATE timehourly SET teacheridh = @teacherId, SET subjectidh = @subjid WHERE hour=@i AND dayid=@ds"; cmd.CommandText = q; cmd.Parameters.AddWithValue("@teacherID", Convert.ToInt32(teacher_combo.SelectedValue).ToString()); cmd.Parameters.AddWithValue("@subjid", Convert.ToInt32(subject_combo.SelectedValue).ToString()); cmd.Parameters.AddWithValue("@i",i.ToString()); cmd.Parameters.AddWithValue("@ds",ds.Tables[0].Rows[k].ItemArray[0].ToString()); cmd.Connection = myCon; myCon.Open(); cmd.ExecuteNonQuery(); System.Windows.Forms.MessageBox.Show("successfully added", "Caption", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); } - 我已经编辑了下面的语法来反映这一点。

INSERT

如果您确实想要WHERE,那么只需从q字符串中取出{{1}}。