SQL Server数据库查询

本文关键字:查询 数据库 Server SQL | 更新日期: 2023-09-27 17:49:29

我使用了ASP.net设置的标准用户表,我希望能够删除用户。为此,首先需要从名为memberships的表中删除用户id,然后删除用户。为此,我设置了2个文本框,一个用于用户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,然后删除用户名

任何帮助都非常感谢

SQL Server数据库查询

如果理解正确,你的输入法有严重的问题。

例如

UserID   UserName
 1        testUser
 2        testUser2 

应用程序中的逻辑;我可以在deleteuserIDbox中输入"1",在deleteuserbox中输入"testUser2",这反过来会删除userID 1,但不是用户名"testUser"。

如果您还没有这样做,您需要使用UserID上的Foreign Key来关联这两个表。因此,链接将与UserID字段保持一致。

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

关于您的查询,您可以将" cmd. executenonquery();"放在两个cmd语句之间。

要使用当前的代码,您需要执行第一个查询,然后为第二个查询设置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注入。永远不要从用户那里获取输入并将该数据连接到SQL语句中。您应该使用存储过程或参数化查询(就像我上面使用的)。

您没有执行第一个命令:

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方法

来做到这一点。http://msdn.microsoft.com/en-us/library/5xxz7y3a.aspx

你根本不应该乱搞成员系统的内部。