Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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 Server数据库查询_C#_Asp.net_Sql Server_Windows - Fatal编程技术网

C# SQL Server数据库查询

C# SQL Server数据库查询,c#,asp.net,sql-server,windows,C#,Asp.net,Sql Server,Windows,我使用了ASP.net设置的标准用户表,希望能够删除用户。首先,我需要从名为memberships的表中删除用户id,然后删除该用户。为此,我设置了两个文本框,一个用于用户id,另一个用于用户名 有没有关于T-SQL语句的想法,该语句将首先删除成员身份用户id,然后移到删除用户名上?这是我目前为止的语句 else { try { connection.Open(); cmd = new SqlCommand("DELETE from Membershio

我使用了ASP.net设置的标准用户表,希望能够删除用户。首先,我需要从名为memberships的表中删除用户id,然后删除该用户。为此,我设置了两个文本框,一个用于用户id,另一个用于用户名

有没有关于T-SQL语句的想法,该语句将首先删除成员身份用户id,然后移到删除用户名上?这是我目前为止的语句

else
{
   try
   {
      connection.Open();
      cmd = new SqlCommand("DELETE from Membershio
                            WHERE UserId ='" + deleteuserIDbox.Text + "'", connection);
      cmd = new SqlCommand("DELETE from Users WHERE UserName ='" + deleteuserbox.Text + "'", connection);
      cmd.ExecuteNonQuery();
      update.Text = "Your data has been removed";
   }
   catch
   {
      update.Text = "Your data has not been deleted";
   }
}
这两个表是相关的,因此我需要先删除用户id,然后删除用户名


要使用当前代码,您需要执行第一个查询,然后为第二个查询设置CommandText并执行该查询

  using (SqlCommand cmd = connection.CreateCommand())
  {
       cmd.CommandText = "DELETE FROM Membership WHERE UserID = @UserID";

       cmd.Parameters.AddWithValue("@UserID", deleteuserIDbox.Text);

       connection.Open();

       cmd.ExecuteNonQuery();

       cmd.Paramters.Clear();

       cmd.CommandText = "DELETE from Users WHERE UserName = @UserName";

       cmd.Parameters.AddWithValue("@UserName", deleteuserbox.Text);

       cmd.ExecuteNonQuery();
  }
另一种选择是使用一个存储过程,它允许您同时运行这两个查询

另一种选择是进行级联删除。下面是关于如何实现这一点的说明


最后,你要向别人敞开心扉。您不应该从用户获取输入并将该数据连接到SQL语句中。您应该使用存储过程或参数化查询(如上文所述)。

要使用当前代码,您需要执行第一个查询,然后为第二个查询设置CommandText并执行该查询

  using (SqlCommand cmd = connection.CreateCommand())
  {
       cmd.CommandText = "DELETE FROM Membership WHERE UserID = @UserID";

       cmd.Parameters.AddWithValue("@UserID", deleteuserIDbox.Text);

       connection.Open();

       cmd.ExecuteNonQuery();

       cmd.Paramters.Clear();

       cmd.CommandText = "DELETE from Users WHERE UserName = @UserName";

       cmd.Parameters.AddWithValue("@UserName", deleteuserbox.Text);

       cmd.ExecuteNonQuery();
  }
另一种选择是使用一个存储过程,它允许您同时运行这两个查询

另一种选择是进行级联删除。下面是关于如何实现这一点的说明


最后,你要向别人敞开心扉。您不应该从用户获取输入并将该数据连接到SQL语句中。您应该使用存储过程或参数化查询(如我上面使用的)。

如果理解正确,您的输入方法存在严重问题

比如说,

UserID   UserName
 1        testUser
 2        testUser2 
应用程序中的逻辑;我可以在deleteuserIDbox中输入“1”,在deleteuserbox中输入“testUser2”,这将依次删除用户ID 1,但用户名“testUser”

如果您还没有这样做,那么需要使用UserID上的外键将这两个表关联起来。因此,链接将通过UserID字段持久化

另一个问题是,您使用来自用户的输入直接执行查询,从而支持sql注入的可能性


关于查询,可以将“cmd.ExecuteNonQuery();”放在两个cmd语句之间

如果理解正确,您的输入法就会出现严重问题

比如说,

UserID   UserName
 1        testUser
 2        testUser2 
应用程序中的逻辑;我可以在deleteuserIDbox中输入“1”,在deleteuserbox中输入“testUser2”,这将依次删除用户ID 1,但用户名“testUser”

如果您还没有这样做,那么需要使用UserID上的外键将这两个表关联起来。因此,链接将通过UserID字段持久化

另一个问题是,您使用来自用户的输入直接执行查询,从而支持sql注入的可能性


关于查询,可以将“cmd.ExecuteNonQuery();”放在两个cmd语句之间

您没有执行第一个命令:

connection.Open();

cmd = new SqlCommand("DELETE from Membershio
      WHERE UserId ='" +
      deleteuserIDbox.Text + "'", connection);

cmd.ExecuteNonQuery();

cmd = new SqlCommand("DELETE from Users WHERE
      UserName ='" + deleteuserbox.Text +
      "'", connection);

cmd.ExecuteNonQuery();

此外,这些命令应该在事务中执行

您没有执行第一个命令:

connection.Open();

cmd = new SqlCommand("DELETE from Membershio
      WHERE UserId ='" +
      deleteuserIDbox.Text + "'", connection);

cmd.ExecuteNonQuery();

cmd = new SqlCommand("DELETE from Users WHERE
      UserName ='" + deleteuserbox.Text +
      "'", connection);

cmd.ExecuteNonQuery();

此外,这些命令应该在事务中执行

有点晚了,但我今天才注意到你的问题

通过在数据库上执行此操作,您绕过了所有好东西!您应该在C#中通过调用Membership::DeleteUser方法来实现这一点


你根本不应该弄乱会员制的内部结构。

有点晚了,但我今天才注意到你的问题

通过在数据库上执行此操作,您绕过了所有好东西!您应该在C#中通过调用Membership::DeleteUser方法来实现这一点


您根本不应该弄乱成员资格系统的内部结构。

我注意到的第一件事是您在sql语句中使用了字符串连接。您需要使用绑定变量:有几个原因。接下来,接受一些答案,你这个懒汉!必须。如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以精确地格式化和语法突出显示它!我注意到的第一件事是在sql语句中使用字符串连接。您需要使用绑定变量:有几个原因。接下来,接受一些答案,你这个懒汉!必须。如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以精确地格式化和语法突出显示它!