C# 使用更新查询更新OLEDB数据库
我对这个问题进行了编辑,以避免再问另一个问题。我正在尝试使用更新查询和参数更新MS Access中的datatable。代码没有给出错误并且运行良好,但是它没有保存更新的数据,我也不知道为什么 以下是我使用的代码:C# 使用更新查询更新OLEDB数据库,c#,oledb,C#,Oledb,我对这个问题进行了编辑,以避免再问另一个问题。我正在尝试使用更新查询和参数更新MS Access中的datatable。代码没有给出错误并且运行良好,但是它没有保存更新的数据,我也不知道为什么 以下是我使用的代码: if (Editing) { string Query = "UPDATE [Employee] SET PayrollNo=@PayrollNo, FirstName=@FirstName, LastName=
if (Editing)
{
string Query = "UPDATE [Employee] SET PayrollNo=@PayrollNo, FirstName=@FirstName, LastName=@LastName, AnnualHolidayEntitlement=@AnnualHolidayEntitlement, DaysTakenToDate=@DaysTakenToDate WHERE PayrollNo = @SentPayroll";
string ConnString = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\HoliPlanData.accdb;Persist Security Info=False";
using (OleDbConnection conn = new OleDbConnection(ConnString))
using (OleDbCommand UpdateEmployee = new OleDbCommand(Query, conn))
{
conn.Open();
UpdateEmployee.Parameters.AddWithValue("@SentPayroll", OleDbType.Integer).Value = Convert.ToInt32(PassPayrollNo);
UpdateEmployee.Parameters.AddWithValue("@PayrollNo", OleDbType.Integer).Value = Convert.ToInt32(TxtPayrollNo.Text);
UpdateEmployee.Parameters.AddWithValue("@FirstName", OleDbType.VarChar).Value = TxtFirstName.Text;
UpdateEmployee.Parameters.AddWithValue("@LastName", OleDbType.VarChar).Value = TxtLastName.Text;
UpdateEmployee.Parameters.AddWithValue("@AnnualHolidayEntitlement", OleDbType.Integer).Value = Convert.ToInt32(TxtAHE.Text);
UpdateEmployee.Parameters.AddWithValue("@DaysTakenToDate", OleDbType.Integer).Value = Convert.ToInt32(TxtDTTD.Text);
UpdateEmployee.ExecuteScalar();
BtnSubmit.Enabled = false;
MessageBox.Show("Data Edited Successfully");
}
如何更改此代码以使其正常工作?提前谢谢
编辑/回答。
我不知道,如果你在更新查询中遇到问题,你可能也不知道。添加参数时,需要按照查询中调用参数的相同顺序添加参数。在我的代码中,第一个参数应该最后添加,因为它是stringQuery中的最后一个参数。我移动了它,它工作得很好
如果其他人在更新查询方面有此问题,我花了太长时间才找到此问题,有人很好地解决了此问题。删除单引号,参数化将为您解决此问题<代码>@?看起来很奇怪。工资单在数据库中是varchar吗?可能是您正在将int32放入参数中,但在addwithvalue中将其设置为varchar?仅供参考,您有
addwithvalue(name,DBTYPE)
它应该是addwithvalue(name,value)
虽然它看起来仍然可以工作,但您可以使用更改来编辑代码,并使用@something
而不是@
和“?”
我可以看出?
可能会导致问题,因为它是一个未命名的OLEDB参数标记,与命名的参数混合,将其更改为与所有其他文件相同的@name格式