SQL delete command?

I am having trouble with a simple DELETE statement in SQL with unexpected results , it seems to add the word to the list. Must be something silly!. but i cannot see it , tried it a few different ways. All the same result so quite confused.

public void IncludeWord(string word) < // Add selected word to exclude list SqlConnection conn = new SqlConnection(); String ConnectionString = "Data Source = dev\\SQLEXPRESS ;" + "Initial Catalog=sml;" + "User ;" + "Password =*;" + "Trusted_Connection=No"; using (SqlConnection sc = new SqlConnection(ConnectionString)) < try < sc.Open(); SqlCommand Command = new SqlCommand( "DELETE FROM excludes WHERE word='@word'" + conn); Command.Parameters.AddWithValue("@word", word); Command.ExecuteNonQuery(); >catch (Exception e) < Box.Text = "SQL error" + e; >finally < sc.Close(); >ExcludeTxtbox.Text = ""; Box.Text = " Word : " + word + " has been removed from the Exclude List"; ExcludeLstBox.AppendDataBoundItems = false; ExcludeLstBox.DataBind(); > 
5,867 72 72 gold badges 60 60 silver badges 132 132 bronze badges asked Jun 20, 2011 at 15:49 user685590 user685590 2,554 5 5 gold badges 31 31 silver badges 44 44 bronze badges

That code will not add an entry rather than delete it. Your issue is elsewhere. Please post any relative bits that are called in junction with this method.

Commented Jun 20, 2011 at 15:52

7 Answers 7

Try removing the single quotes. Also why are you concatenating your SQL string with a connection object ( .. word='@word'" + conn ).

try < using (var sc = new SqlConnection(ConnectionString)) using (var cmd = sc.CreateCommand()) < sc.Open(); cmd.CommandText = "DELETE FROM excludes WHERE word = @word"; cmd.Parameters.AddWithValue("@word", word); cmd.ExecuteNonQuery(); >> catch (Exception e) < Box.Text = "SQL error" + e; >. 

Notice also that because the connection is wrapped in a using block you don't need to Close it in a finally statement. The Dispose method will automatically call the .Close method which will return the connection to the ADO.NET connection pool so that it can be reused.

Another remark is that this IncludeWord method does far to many things. It sends SQL queries to delete records, it updates some textboxes on the GUI and it binds some lists => methods like this should be split in separate so that each method has its own specific responsibility. Otherwise this code is simply a nightmare in terms of maintenance. I would very strongly recommend you to write methods that do only a single specific task, otherwise the code quickly becomes a complete mess.