【发布时间】:2012-04-06 03:30:22
【问题描述】:
我在向我的 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 (?, ?, ?, ?, ?, ?, ?, ?)
非常感谢
【问题讨论】:
-
您可能想尝试命名参数,而不是
?。 JET 应该了解您在做什么。即INSERT INTO ... VALUES (@A, @B, @C),然后将命名参数(例如@clientID)添加到您的OleDbCommand。 -
@ta.spect.is 您不能将命名参数与 OleDbCommand 一起使用(我更新了我的答案并附上了一个注释,这也让我措手不及)
-
@pstrjds 我很确定 JET 的做法略有不同。你可以说
VALUES (@A, @B, @A),只需要依次加上@A和@B。 -
@ta.speot.is 这不是底层引擎的问题,你可以在 Jet 中使用命名值,他使用的是 OleDB 连接器,它只支持位置参数。我在回答中提供了一个链接。
-
@pstrjds 是的,我记得
Microsoft.Jet.OLEDB.4.0在您通过System.Data.OleDb使用它时支持命名参数。