2011-04-06 189 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#。