2011-04-06 240 views
0

我已经使用了ASP.net安装程序和我期望能够删除用户的标准用户表。首先要做到这一点,我需要从名为memberships的表中删除用户标识,然后删除用户。要做到这一点,我有两个文本框设置为用户ID和其他用户名称。SQL Server数据库查询

一个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,然后再在用户名

任何帮助非常appricated

+2

我注意到的第一件事是你在你的sql语句中使用字符串连接。你会想使用绑定变量:http://www.richquackenbush.com/2011/02/bind-variables.html有几个原因。接下来,接受一些你懒鬼的答案! – RQDQ 2011-04-06 13:29:47

+2

强制性[XKCD参考](http://xkcd.com/327/)。 – SWeko 2011-04-06 13:36:36

+0

如果您发布代码,XML或数据样本,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”),以精确地格式化和语法突出显示它! – 2011-04-08 21:09:20

回答

2

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

例如,

UserID UserName 
1  testUser 
2  testUser2 

与应用程序中的逻辑;我可以在deleteuserIDbox中输入“1”并将“testUser2”输入到deleteuserbox中,然后删除userID 1,但是而不是用户名“testUser”。

如果您尚未执行此操作,则需要使用UserID上的外键关联这两个表。因此,该链接与UserID字段保持一致。

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

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

1

要使用当前的代码,你将需要执行第一个查询,然后设置在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(); 
    } 

另一个选择是使用一个存储过程,它可以让你一起运行这两个查询。

另一种选择是级联删除。这里是a link关于如何做到这一点。

最后,你打开自己达到SQL Injection。你永远不要从用户那里获得输入,并将这些数据连接成一条SQL语句。你应该使用存储过程或参数化查询(就像我上面使用的)。

0

你没有执行相应的命令:

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(); 

而且,这些命令应该在一个事务中执行。

0

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

通过在数据库上执行此操作,您可以绕过所有好东西!你应该通过调用成员:: DeleteUser方法

http://msdn.microsoft.com/en-us/library/5xxz7y3a.aspx

你不应该用会员制的内部都乱做这在C#。