2014-01-29 70 views
1

我得到這個錯誤:查詢輸入必須包含至少一個表或查詢 我的代碼是:收到錯誤:查詢輸入必須包含至少一個表或查詢

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

要修復的第一件事:使用參數化的SQL而不是字符串連接。這將使您的SQL更易於閱讀,避免轉換問題,並避免SQL注入攻擊。解決這個問題,然後看看你的問題是否仍然存在。如果確實如此,請在問題中編輯更好的代碼,修復格式(縮進遍佈整個位置),而且更有可能獲得幫助。哦,並描述你的模式。 –

+0

merci ..我試圖做 – Ghadir

+0

我做但沒有任何改變..ho解決 – Ghadir

回答

2

您需要刪除撇號從你的參數聲明中。同時驗證您傳遞給查詢的值中是否有數據。在添加參數之前還要指定您的CommandText

此外,您還可以將OleDbCommand包裝在using聲明中,並且它也實施IDisposable

然後,您嘗試使用WHERE子句執行INSERT,這不起作用。

INSERTINSERT語句旨在實際向表中插入一行,但不能在已經有行的地方插入一行。

你在找什麼是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 [email protected] AND [email protected]"; 
    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字符串。

+0

不工作:(我得到的錯誤 – Ghadir

+0

@Ghadir現在我看到了它,你不能做一個INSERT與WHERE。你想更新表嗎?或者插入一個新的行? –

+0

謝謝:)它完美的作品現在.. – Ghadir

相關問題