2013-06-05 62 views
2

我很難從SQL數據庫中刪除行,我沒有收到任何錯誤,它似乎工作正常,但沒有被刪除。當我運行代碼它會輸出「名稱已被刪除」從表中刪除一行似乎失敗

感謝您的任何幫助。

SqlConnection conn = new SqlConnection(); 
conn.ConnectionString = "Data Source=(LocalDB)\\v11.0;AttachDbFilename=|DataDirectory|\\MyDB.mdf;Integrated Security=True"; 

try 
{ 
    conn.Open(); 
    SqlCommand Command = conn.CreateCommand(); 
    Command.CommandText = "DELETE FROM Contacts WHERE [First Name] = '@Name';"; 
    Command.Parameters.AddWithValue("@Name", DropDownList1.SelectedValue); 
    Command.ExecuteNonQuery(); 
    TextBox1.Text = DropDownList1.SelectedValue + " Has Been Deleted"; 
} 
catch (Exception ex) 
{ 
    TextBox1.Text = "Nope"; 
} 
finally 
{ 
    conn.Close(); 
} 
+0

的ExecuteNonQuery返回一個數字,表示有多少行已被刪除,這樣你就不會得到一個異常,如果它是沒有的。 – Andrew

+0

請刪除'@ Name'周圍的''引號,然後重試 – Amitd

+0

您不需要在查詢中使用'@ Name'周圍的引號 – valverij

回答

4

刪除參數周圍的引號。同時從參數中刪除@ -sign,將其添加到命令中。

Command.CommandText = "DELETE FROM Contacts WHERE [First Name] = @Name;"; 
Command.Parameters.AddWithValue("Name", DropDownList1.SelectedValue); 
+2

根據我的經驗,[@ sign](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue%28v = vs.90%29.aspx)很好。 – valverij

2

您的條件很可能未被滿足。 (參數周圍的引號)所以沒有記錄被刪除。

Command.ExecuteNonQuery(); 

返回記錄計數的整數。所以你可以檢查零點以確保它被刪除。

4

您不需要帶有參數化查詢的單引號。

1

詳述如下幾件事情:

SqlConnection conn = new SqlConnection(); 
conn.ConnectionString = "Data Source=(LocalDB)\\v11.0;AttachDbFilename=|DataDirectory|\\MyDB.mdf;Integrated Security=True"; 

try 
{ 
    conn.Open(); 
    SqlCommand Command = conn.CreateCommand(); 
    Command.CommandText = "DELETE FROM Contacts WHERE [First Name] = Name;"; // You don't need the '' or the '@' in your parameter name. 
    Command.Parameters.AddWithValue("@Name", comboBox1.SelectedValue); 
    if (Command.ExecuteNonQuery() > 0) // Add a conditional here that checks for > 0 and THEN set your validation text. 
     textBox1.Text = comboBox1.SelectedValue + " Has Been Deleted"; 
} 

catch (Exception ex) 
{ 
    textBox1.Text = "Nope"; 
} 

finally 
{ 
    conn.Close(); 
}