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

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

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

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

您也可以将OleDbCommand包装在using语句中,因为它实现了IDisposable

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

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那么只需从你的q字符串中取出WHERE