C# 更新查询未引发错误

C# 更新查询未引发错误,c#,sql,sql-update,C#,Sql,Sql Update,提前谢谢你的帮助 我试图在C语言中使用更新查询# 错误:即使我使用了不正确的值,也会执行命令 代码: 如果您输入了“不正确”的值,它只会更新零个记录。此处不应出现错误/异常。您的代码看起来会更好,它不是最理想的,但它已经是一段比您的代码片段更好的代码 1) 使用辅助函数为sql注入问题添加了参数 2) ExecuteOnQuery返回受影响的行,因此如果您希望更新1行,可以检查该行 3) 如果您使用不存在的id更新一行,它将不会像您在代码中所期望的那样引发SqlException,例如在发生锁

提前谢谢你的帮助

我试图在C语言中使用更新查询#

错误:即使我使用了不正确的值,也会执行命令

代码:


如果您输入了“不正确”的值,它只会更新零个记录。此处不应出现错误/异常。

您的代码看起来会更好,它不是最理想的,但它已经是一段比您的代码片段更好的代码

1) 使用辅助函数为sql注入问题添加了参数

2) ExecuteOnQuery返回受影响的行,因此如果您希望更新1行,可以检查该行

3) 如果您使用不存在的id更新一行,它将不会像您在代码中所期望的那样引发SqlException,例如在发生锁定时会发生这种情况

 public void Update()
        {
            var con = new SqlConnection();
            try
            {

                var empId = TxtEMPID.Text
                var avayaId = TxtAvayaID.Text
                con.Open();

                var cmd1 = new SqlCommand("update Comcast_AvayaID set Status='Inactive' where Employee_Id=@empId and AvayaID = @avayaId", con);              
                cmd1.Parameters.Add(AddParameter("@empId",empId));
                cmd1.Parameters.Add(AddParameter("@avayaId", avayaId));

                var cmd2 = new SqlCommand("UPDATE Avaya_Id SET Status = 'UnAssigned' where Avaya_ID =avayaId", con);
                cmd2.Parameters.Add(AddParameter("@avayaId", avayaId));

                var rowsaffected1 = cmd1.ExecuteNonQuery();

                var rowsAffected2 = cmd2.ExecuteNonQuery();

                if (rowsaffected1 == 1 && rowsAffected2 == 1)
                {
                    //success code goes here
                    //--------
                    LBLSuccess.Visible = true;
                    LBLSuccess.Text = "Deactivation Successfull";
                }
                else
                {
                    // failure code goes here
                    //-----------------------
                    LBLSuccess.Visible = true;
                    LBLSuccess.Text = "Deactivation Unsuccessfull";
                }
            }
            catch (SqlException ex)
            {
                //handle errors
            }
            finally
            {
                con.Close();
            }


            Console.ReadLine();
        }

        private SqlParameter AddParameter(string name, object value) {
            var par = new SqlParameter();
            par.ParameterName = name;
            par.Value = value;
            return par;
        }

您的代码极易受到SQL注入攻击。使用参数化查询!您所说的
错误值是什么意思?是否要添加输入验证?在获得异常时,请写出ex.message属性,而不是编写无用的消息。这将是必要的,以了解这里发生了什么(当然,告诉我们你们在那个里得到了什么),你们为什么要把你们不想传递给用户的消息@史蒂夫没有按照之前的评论做。SqlException可以是关于任何内容的,用户不确定是否应该看到它,如果您显示它,它可以是+1到+1threat@EugeneGorbovoy我们正试图调试它的问题。如果他可以将异常写入日志文件,但为了了解发生了什么,那么最好让异常可见。在生产代码中,如果不打算处理异常处理程序,则根本没有异常处理程序。该解决方案非常有效。但是为什么这个函数使用私有的Sql参数Addi形形参(String name,Objor value){var PAR=NeXQualPosiple(),PAR.NealErrname=name;Pal.Value=value;返回PAR;}它只是一个帮助函数,因为没有默认构造函数来创建具有名称和值的SqlParameter。通过使用此选项,您将获得更干净的代码和更少的重复。我使用这些参数来防止查询中的SQL注入,就像您的示例所做的一样。有关SQL的更多信息,请参阅injection@BenCroughs我们已经很久很久了。但是,在添加参数时,最好指定其类型和大小。@Steve thx忘记了这一点,有时我仍然是老派:-)但实际上,通过帮助函数,您可以轻松添加类型和大小为什么要放置catch(SqlException)-您希望在这里出现哪些异常?
 public void Update()
        {
            var con = new SqlConnection();
            try
            {

                var empId = TxtEMPID.Text
                var avayaId = TxtAvayaID.Text
                con.Open();

                var cmd1 = new SqlCommand("update Comcast_AvayaID set Status='Inactive' where Employee_Id=@empId and AvayaID = @avayaId", con);              
                cmd1.Parameters.Add(AddParameter("@empId",empId));
                cmd1.Parameters.Add(AddParameter("@avayaId", avayaId));

                var cmd2 = new SqlCommand("UPDATE Avaya_Id SET Status = 'UnAssigned' where Avaya_ID =avayaId", con);
                cmd2.Parameters.Add(AddParameter("@avayaId", avayaId));

                var rowsaffected1 = cmd1.ExecuteNonQuery();

                var rowsAffected2 = cmd2.ExecuteNonQuery();

                if (rowsaffected1 == 1 && rowsAffected2 == 1)
                {
                    //success code goes here
                    //--------
                    LBLSuccess.Visible = true;
                    LBLSuccess.Text = "Deactivation Successfull";
                }
                else
                {
                    // failure code goes here
                    //-----------------------
                    LBLSuccess.Visible = true;
                    LBLSuccess.Text = "Deactivation Unsuccessfull";
                }
            }
            catch (SqlException ex)
            {
                //handle errors
            }
            finally
            {
                con.Close();
            }


            Console.ReadLine();
        }

        private SqlParameter AddParameter(string name, object value) {
            var par = new SqlParameter();
            par.ParameterName = name;
            par.Value = value;
            return par;
        }