Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果sql请求成功,则显示消息_C#_Sql - Fatal编程技术网

C# 如果sql请求成功,则显示消息

C# 如果sql请求成功,则显示消息,c#,sql,C#,Sql,如果我的sql请求顺利完成,我想显示一条消息。在这一刻,我有代码为每个成功完成的请求显示MessageBox,但是如果没有用户名并且没有再次完成,那么它将显示相同的MessageBox try { using (SqlConnection con = new SqlConnection(constring)) { con.Open(); using (SqlCommand command = new SqlCommand("DELETE FROM

如果我的sql请求顺利完成,我想显示一条消息。在这一刻,我有代码为每个成功完成的请求显示MessageBox,但是如果没有用户名并且没有再次完成,那么它将显示相同的MessageBox

try
{
    using (SqlConnection con = new SqlConnection(constring))
    {
        con.Open();
        using (SqlCommand command = new SqlCommand("DELETE FROM dbo.Admin WHERE UserName  = '" + txtUserName.Text +"'", con))
        {
            command.ExecuteNonQuery();
            MessageBox.Show("Successful operation!");
        }
        con.Close();
    }

我怎样才能解决这个问题?我只想在sql请求有结果时显示成功的操作,而不是每次执行该命令时都显示成功的操作。

您只需获得受影响的行数,如下所示:

var numbersOfAffectedRows = command.ExecuteNonQuery();
然后检查它是否大于零

if(numbersOfAffectedRows>0)
{
    MessageBox.Show("Successful operation!");
}
查看方法的结果,它返回受影响的行数。因此,如果大于0,u可以显示消息框:

if(command.ExecuteNonQuery() > 0)
{
    MessageBox.Show("Successful operation!");
}
在安全性方面,您的代码中还有另一个问题,您永远不应该通过连接普通用户输入来构建sql查询,而应该使用sql参数,您可以从以下链接了解更多关于sql参数和sql注入的信息:


您应该检查从ExecuteOnQuery命令返回的受影响的行数,如下所示:

   using (SqlConnection con = new    SqlConnection(constring))
   {
       con.Open();
       using (SqlCommand command = new   SqlCommand("DELETE FROM dbo.Admin WHERE  UserName  = '" + txtUserName.Text +"'", con))
       {
           if( command.ExecuteNonQuery() > 0)
              MessageBox.Show("Successful operation!");
       }
       con.Close();
  }

首先,您确实应该使用sql参数来避免潜在的sql注入攻击。Second
ExecuteNonQuery
返回生效的行数,这样您就可以知道行是否被删除。非常感谢。如果我想在messagebox没有删除某些内容时显示它,我能为这种情况做些什么?再次感谢你,不客气。如果受影响的行数等于零,则不会删除任何行,因此您应该在If语句的else部分添加“no rows deleted”消息。感谢您为我的安全性提供的建议。但就目前而言,这是一个复杂的大学项目组成部分。我真的很想知道如何使我的代码更安全、更受保护。我将查看这些链接。再次感谢你,祝你今天愉快。