ExecuteNonQuery返回受影响的C#的意外行数

问题描述

对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数。

当要插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,返回值为-1。如果发生回滚,则返回值也为-1。

解决方法

这是我的代码

      // SqlCommand query = new SqlCommand("INSERT INTO devis (idProposition,identreprise,tauxHoraire,fraisGenerauxMO,fraisGenerauxPiece,beneficeEtAleas,idStatut,prixUnitaireVenteMO ) VALUES(@idproposition,@identreprise,@tauxHoraire,@fraisGenerauxMO,@fraisGenerauxPiece,@beneficeEtAleas,1,@prixUnitaireVenteMO) ",Tools.GetConnection());
     SqlCommand query = new SqlCommand("INSERT INTO devis (idProposition,prixUnitaireVenteMO,alerteEntrepriseEnvoyee,fraisDeplacement ) VALUES(1051,85,20,2,2.2,88,-1) ",Tools.GetConnection());

    //query.Parameters.AddWithValue("idproposition",this.ID);
    //query.Parameters.AddWithValue("identreprise",competitor.ID);
    //query.Parameters.AddWithValue("tauxHoraire",competitor.CoefTauxHoraire);
    //query.Parameters.AddWithValue("fraisGenerauxMO",competitor.CoefFraisGenerauxMO);
    //query.Parameters.AddWithValue("fraisGenerauxPiece",competitor.CoefFraisGenerauxPiece);
    //query.Parameters.AddWithValue("beneficeEtAleas",competitor.CoefBeneficeEtAleas);
    //query.Parameters.AddWithValue("prixUnitaireVenteMO",Math.Round(competitor.CoefTauxHoraire * competitor.CoefFraisGenerauxMO * competitor.CoefBeneficeEtAleas,2));
 bool insertOK = (query.ExecuteNonQuery() == 1);
 if (insertOK)
 {
    // DO SOMETHING
 }

insertOk 为假,但在数据库中插入该行以及我指定的所有信息

我手动重建查询以查看问题是否来自查询。参数,它再次无错误地插入数据库,但insertOk仍然为false!我什至还添加了另外两个不应该为空的字段,但是两种情况下的活动都是相同的

有任何想法吗?