C#使用SqlCeCommand执行Update报缺少第8个参数错误如何解决?
SqlCe更新操作报缺少参数(Parameter ordinal=8)的原因和解决方法
错误原因
- SqlCe 不支持按参数名匹配绑定,仅按照参数在SQL语句中出现的顺序,和
AddWithValue添加参数的顺序一一对应绑定。你代码中SQL语句的参数顺序和参数添加顺序不匹配:SQL里第一个参数是@ProductName,但你第一个添加的参数是@ProductCode,顺序完全错位,到第8个参数时无对应赋值触发报错。 - 若参数赋值为C#的
null值,AddWithValue会将其视为未提供参数,如果8个参数中任意一个值为null,也会触发该错误。
解决步骤
- 调整参数添加顺序,严格和SQL语句中参数出现的顺序保持一致,同时处理可能的null值,修改后的参数添加代码如下:
cmd.Parameters.Clear(); // 顺序和SQL中的参数顺序完全对应:ProductName→Specification→DepartmentId→UnitId→TCategoryId→HSNId→SGroupId→ProductCode cmd.Parameters.AddWithValue("@ProductName", dgvAdjustment.Rows[i].Cells[1].Value.ToString().ToUpper()); cmd.Parameters.AddWithValue("@Specification", strSpecification == null ? DBNull.Value : (object)strSpecification); cmd.Parameters.AddWithValue("@DepartmentId", strDepartmentId == null ? DBNull.Value : (object)strDepartmentId); cmd.Parameters.AddWithValue("@UnitId", strUnitId == null ? DBNull.Value : (object)strUnitId); cmd.Parameters.AddWithValue("@TCategoryId", strTCategoryId == null ? DBNull.Value : (object)strTCategoryId); cmd.Parameters.AddWithValue("@HSNId", strHSNId == null ? DBNull.Value : (object)strHSNId); cmd.Parameters.AddWithValue("@SGroupId", strSGroupId == null ? DBNull.Value : (object)strSGroupId); cmd.Parameters.AddWithValue("@ProductCode", dgvAdjustment.Rows[i].Cells[0].Value.ToString().ToUpper());
- 执行
cmd.ExecuteNonQuery()前加断点,查看cmd.Parameters集合的所有项,确认8个参数的Value属性都没有C# null值,且顺序和SQL参数顺序匹配。
内容的提问来源于stack exchange,提问作者Tejas Panchmatiya
相关产品推荐
相关产品推荐

