2011-06-20 105 views
2

我在SQL中遇到了一個簡單的DELETE語句出現意外結果的麻煩,它似乎將這個單詞添加到列表中。必須是愚蠢的東西!但我看不到它,嘗試了幾種不同的方法。所有相同的結果如此混亂。SQL刪除命令?

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 id=** ;" + "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(); 
    } 
+0

該代碼不會添加條目而不是刪除它。你的問題在別處。請張貼與此方法交匯的任何相關位。 –

回答

11

嘗試刪除單引號。你爲什麼要連接你的SQL字符串和連接對象(.. 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; 
} 
... 

還要注意的是,因爲連接被包裹在一個使用塊,你並不需要關閉它在finally聲明。 Dispose方法將自動調用.Close方法,該方法將返回到ADO.NET連接池的連接,以便可以重用它。

另一種說法是,這種方法做了很多事情。它發送SQL查詢來刪除記錄,它更新GUI上的一些文本框,並綁定一些列表=>這樣的方法應該分開分割,以便每種方法都有其特定的責任。否則這個代碼在維護方面只是一場噩夢。我強烈建議你編寫只執行一個特定任務的方法,否則代碼很快就會變成一團糟。

+0

謝謝我回到所有的代碼,發現它從我不想調用的函數分支出來。我重寫了刪除功能以及它的所有工作!感謝提示。 – user685590

1

@Word不應在sql查詢中引號。

不知道你爲什麼試圖在sql查詢的末尾添加連接。

2
SqlCommand Command = new SqlCommand(
        "DELETE FROM excludes WHERE word='@word'" + 
        conn); 

SqlCommand Command = new SqlCommand(
        "DELETE FROM excludes WHERE word='@word'", 
        conn); 

還通過刪除單引號代替別人的建議是這樣

SqlCommand Command = new SqlCommand(
        "DELETE FROM excludes WHERE [email protected]", 
        conn); 
0

要調試這一點,研究在CommandText SqlCommand對象上。在進一步閱讀之前,您應該嘗試一下。

問題出在繞參數化的字符串添加單引號。刪除單引號,生活是美麗的。 :-)

哦,你的conn是一個對象,需要一個逗號,而不是+。

0

private void button4_Click(object sender,EventArgs e) String st =「DELETE FROM supplier WHERE supplier_id =」+ textBox1.Text;

 SqlCommand sqlcom = new SqlCommand(st, myConnection); 
     try 
     { 
      sqlcom.ExecuteNonQuery(); 
      MessageBox.Show("delete successful"); 
     } 
     catch (SqlException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 


    private void button6_Click(object sender, EventArgs e) 
    { 
     String st = "SELECT * FROM supplier"; 

     SqlCommand sqlcom = new SqlCommand(st, myConnection); 
     try 
     { 
      sqlcom.ExecuteNonQuery(); 
      SqlDataReader reader = sqlcom.ExecuteReader(); 
      DataTable datatable = new DataTable(); 
      datatable.Load(reader); 
      dataGridView1.DataSource = datatable; 
     } 
     catch (SqlException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    }