我收到此错误:查询输入必须至少包含一个表或查询 我的代码是:
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);}
答案 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}}。