2012-04-06 91 views
1

我很難將記錄插入到我的訪問數據庫中。我已經嘗試了訪問中的查詢,它插入正常。我也在查詢生成器中嘗試過查詢,但它也起作用,但是如果我運行此代碼,它聲稱已將該記錄插入到數據庫中,但是當我檢查數據庫時,沒有新記錄的跡象。將記錄插入到Access數據庫中

 oleDbCommandCreateAppointment.Parameters["appointmentDate"].Value = "06/04/2012"; 
     oleDbCommandCreateAppointment.Parameters["timeSlotID"].Value ="21"; 
     oleDbCommandCreateAppointment.Parameters["startTime"].Value = "09:00"; 
     oleDbCommandCreateAppointment.Parameters["employeeID"].Value ="1"; 
     oleDbCommandCreateAppointment.Parameters["clientID"].Value ="1"; 
     oleDbCommandCreateAppointment.Parameters["assistantID"].Value ="1"; 
     oleDbCommandCreateAppointment.Parameters["appointmentType"].Value = "Quote"; 
     oleDbCommandCreateAppointment.Parameters["appointmentFlag"].Value = "Booked"; 

     try 
     { 
      oleDbConnection.Open(); 
      int rows = oleDbCommandCreateAppointment.ExecuteNonQuery(); 

      MessageBox.Show("Rows inserted " + rows.ToString()); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      oleDbConnection.Close(); 
     } 

SQL命令

INSERT INTO tblAppointments 
        (appointmentDate, timeSlotID, startTime, employeeID, clientID, assistantID, appointmentType, appointmentFlag) 
    VALUES  (?, ?, ?, ?, ?, ?, ?, ?) 

非常感謝

+0

您可能想嘗試命名參數,而不是'?'。 JET應該明白你在做什麼。也就是'INSERT INTO ... VALUES(@A,@B,@C)',然後爲你的'OleDbCommand'添加命名參數(例如'@ clientID')。 – 2012-04-06 04:44:45

+0

@ ta.spect.is你不能在OleDbCommand中使用命名參數(我更新了我的答案和關於這個的註釋,它也讓我非常警惕) – pstrjds 2012-04-06 04:48:59

+0

@pstrjds我非常確定JET與它略有不同。你可以說'VALUES(@A,@B,@A)',你只需要按順序添加'@ A'和'@ B'。 – 2012-04-06 21:57:56

回答

3

您需要使用DB命令對象的連接相關聯:

oleDbConnection.Open(); 
oleDbCommandCreateAppointment.Connection = oleDbConnection; 
int rows = oleDbCommandCreateAppointment.ExecuteNonQuery(); 

編輯 - 這 可能 有做的參數排序,試試這個:

oleDbCommandCreateAppointment.Parameters[0].Value = "06/04/2012"; 
oleDbCommandCreateAppointment.Parameters[1].Value = "21"; 
oleDbCommandCreateAppointment.Parameters[2].Value = "09:00"; 
oleDbCommandCreateAppointment.Parameters[3].Value = "1"; 
oleDbCommandCreateAppointment.Parameters[4].Value = "1"; 
oleDbCommandCreateAppointment.Parameters[5].Value = "1"; 
oleDbCommandCreateAppointment.Parameters[6].Value = "Quote"; 
oleDbCommandCreateAppointment.Parameters[7].Value = "Booked"; 

注意 - 這是這方面的工作,而我瞭解到,你不能用ODBC和OLEDB命令使用命名參數,只有位置參數(請參見Table 6),並且此鏈接指出OleDbCommand對象僅在命令類型爲Text時才支持位置參數。位置參數依賴於順序。

+0

做到了,但仍然存在相同的問題 – mjsey 2012-04-06 03:39:50

+0

從您發佈的代碼看,您看起來並不像您所看到的那樣,您可以展示更多代碼,然後顯示命令對象的構建等。你是在開一個交易而不是交易嗎? – pstrjds 2012-04-06 03:40:49

+0

對不起,我的意思是我添加了你的建議。我的連接對象位於窗體的托盤區域,我的插入命令也是如此。 – mjsey 2012-04-06 03:43:07