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,然后删除用户名
任何帮助都非常感谢
如果理解正确,你的输入法有严重的问题。
例如
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你根本不应该乱搞成员系统的内部。