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

Mik*_*ant 2 c# sql sql-server

这是我的代码

      // 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, identreprise, tauxHoraire, fraisGenerauxMO, fraisGenerauxPiece, beneficeEtAleas, idStatut, prixUnitaireVenteMO, alerteEntrepriseEnvoyee,fraisDeplacement ) VALUES(1051,  85, 20, 2, 2, 2.2, 1, 88,0,-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
 }
Run Code Online (Sandbox Code Playgroud)

insertOk 是false,但在数据库中插入的行包含我指定的所有信息

我手动重建查询以查看问题是否来自query.Parameters,它再次插入没有错误进入数据库但insertOk仍然是假的!我甚至添加了两个不应该为null的其他字段,但在两种情况下活动都是相同的

有任何想法吗?

Rem*_*anu 7

ExecuteNonQuery它声称要回来了The number of rows affected..这是不正确的,因为客户端无法知道受影响的行数.文档错误地假定引擎将报告受影响的行数,但这取决于会话SET NOCOUNT状态.不要编写假定NOCOUNT始终打开的代码.如果您需要知道受影响的行数,请使用该OUTPUT子句.依赖于@@ROWCOUNT或者SET NOCOUNT状态受许多极端情况的影响,其中从一个观点或另一个观点来看价值是不正确的.