我想更新 DB2/AS400 表中的数据集。
问题是如果参数列表中有字符串参数,则命令找不到要更新的行。
例如:如果我只使用公司编号运行命令,则命令将成功。如果我使用公司编号和设施编号运行命令,则命令失败。
有人有什么主意吗?
IDbConnection cn = Tools.GetCnApp();
try
{
StringBuilder sql = new StringBuilder();
sql.AppendLine("UPDATE " + Tools.GetSchemeApp() + "/ChangeReasonAssignments");
sql.AppendLine(" SET Confirmed = @CONF, Confirmed_By = @CONFBY, Confirmed_At = @CONFAT");
sql.AppendLine(" WHERE Company = @CONO AND Facility = @FACI AND Department = @DEPT");
sql.AppendLine(" AND Production_Group = @PRGR AND Manufacturing_Order = @ORDR AND Order_Operation = @OPER");
sql.AppendLine(" AND Confirmed = 0");
IDbCommand cmd = cn.CreateCommand();
cmd.SetParameter("@CONO", this.CompanyNumber);
cmd.SetParameter("@FACI", this.FacilityNumber);
cmd.SetParameter("@DEPT", this.ProductionGroup.Department.Name);
cmd.SetParameter("@PRGR", this.ProductionGroup.Name);
cmd.SetParameter("@ORDR", this.ManufacturingNumber);
cmd.SetParameter("@OPER", this.OperationNumber);
cmd.SetParameter("@CONFBY", Base.User);
cmd.SetParameter("@CONFAT", DateTime.Now.ToString());
cmd.SetParameter("@CONF", 1);
cmd.CommandText = sql.ToString();
if (cmd.ExecuteNonQuery() > 0)
{
}
编辑
数据库中的数据类型有:
- 公司:整数
- 设施:VARCHAR
- 部门:VARCHAR
- 生产组:VARCHAR
- 制造_订单:INTEGER
- Order_Operation:整数
.NET中的数据类型是:
- 公司编号:int
- 设施编号:字符串
- 部门名称:字符串
- 生产组:字符串
- 制造顺序:int
- 订单操作:int
sql.ToString() 结果:
UPDATE TSAEDBDEV/ChangeReasonAssignments SET Confirmed = @CONF, Confirmed_By = @CONFBY, Confirmed_At = @CONFAT WHERE Company = @CONO AND Facility = @FACI AND Confirmed = 0