我尝试在我的Access中更新一行,我的代码运行正常,我必须Exception,但是没有什么改变我的数据库
这是我从Winform项目中的表单调用的方法
public static void UpdateNextReportNumber(int machineNumber, string reportNumber)
{
try
{
using (OleDbConnection openCon = new OleDbConnection(localConnectionString))
{
string saveStaff = "UPDATE [Calibration] " +
"SET [NextReportNumber]=@report " +
"where [MachineNumber]=@machine";
using (OleDbCommand querySaveStaff = new OleDbCommand(saveStaff))
{
querySaveStaff.Connection = openCon;
querySaveStaff.Parameters.AddWithValue("@machine", 16);
querySaveStaff.Parameters.AddWithValue("@report",2);//Convert.ToInt32(reportNumber.Remove(0, 3)) + 1
openCon.Open();
int recordsAffected = querySaveStaff.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
//WriteLog(ex.StackTrace, ex.Message);
throw ex;
}
}
我的代码通过了这一行
int recordsAffected = querySaveStaff.ExecuteNonQuery();
但在受影响的记录中,我的值为0
我不知道该怎么做
我尝试使用Access this query
执行UPDATE [Calibration]
SET [NextReportNumber]=2
where [MachineNumber]=36
工作正常
我也用过
public static void AddCalibration(Calibration calibration)
{
try
{
using (OleDbConnection openCon = new OleDbConnection(localConnectionString))
{
string saveStaff = "INSERT into [Calibration] ([MachineNumber] ,[LastCalibrationDate] ,[NextCalibrationDate])" +
"VALUES (@MachineNumber, @LastCalibrationDate, @NextCalibrationDate)";
using (OleDbCommand querySaveStaff = new OleDbCommand(saveStaff))
{
querySaveStaff.Connection = openCon;
querySaveStaff.Parameters.AddWithValue("@MachineNumber", calibration.MachineNumber);
querySaveStaff.Parameters.AddWithValue("@LastCalibrationDate", calibration.LastCalibrationDate);
querySaveStaff.Parameters.AddWithValue("@NextCalibrationDate", calibration.NextCalibrationDate);
openCon.Open();
int recordsAffected = querySaveStaff.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
//WriteLog(ex.StackTrace, ex.Message);
throw ex;
}
}
它也可以正常工作......
感谢您的帮助...
答案 0 :(得分:2)
在OleDb中,参数不能通过名称识别,而是通过它们在参数集合中的位置来识别。您只需更改参数的行顺序
即可querySaveStaff.Parameters.AddWithValue("@report",2);
querySaveStaff.Parameters.AddWithValue("@machine", 16);
在您当前的查询中,报告的参数用于Where语句而不是更新部分,当然没有更新,因为没有记录 WHERE MachineNumber = 2
实际上,在OleDb中,您通常使用单个?指定参数占位符,而不是使用 @something 语法,但是Access,可能为了更方便,Sql Server也可以接受@语法仍然是参数集合中的位置应该是查询文本中预期的正确位置。