2017-04-13 65 views
1

我在我的數據庫中的列是[CusName], [CusNo], [CusAdvance], [TotalAmount], [ID][CusItem]。我輸入了要從textBox4.Text中刪除的客戶名稱。 我修改了代碼,就像我從你們那裏得到的一樣。但仍然沒有刪除條目。他們仍然留在數據庫中。從OleDB C刪除數據#

我的代碼:

void Button1Click(object sender, EventArgs e) 
{ 
    try 
    { 
     OleDbConnection delConn = new 
      OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data 
      Source=C:/NavneethCollection.accdb;Persist Security Info=False;"); 
     delConn.Open(); 
     String delQuery = "DELETE FROM NavColl WHERE [CusName]= @CustName"; 
     OleDbCommand delcmd = new OleDbCommand(); 
     delcmd.CommandText = delQuery; 
     delcmd.Connection = delConn; 
     delcmd.Parameters.AddWithValue("@CustName", textBox4.Text); 
     delcmd.ExecuteNonQuery(); 
     MessageBox.Show("Customer has been successfully removed!"); 
    } 
    catch(Exception exc) 
    { 
     MessageBox.Show("Error: "+exc.Message); 
    } 
} 
+1

您的刪除應該是刪除FROM NavColl WHERE [CusName] ='某個名字'。您不必指定列。 –

+0

DELETE列與Access一起工作。他們簡單地被忽略。文本框4中出現錯誤的可能性更大,並且沒有記錄被刪除。你可以嘗試讀取ExecuteNonQuery的返回值。如果它爲零,那麼WHERE語句沒有找到要刪除的記錄 – Steve

+0

順便說一下,連接字符串不應該在數據和源之間進行拆分。任何額外的空格都會導致_Installable ISAM找不到_異常 – Steve

回答

2

在你刪除命令,你應該只使用

try 
{ 
    OleDbConnection delConn = new 
     OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data 
     Source=C:/NavneethCollection.accdb;Persist Security Info=False;"); 
    delConn.Open(); 
    String delQuery = "DELETE FROM NavColl WHERE [CusName]= @CustName"; 
    OleDbCommand delcmd = new OleDbCommand(); 
    delcmd.CommandText = delQuery; 
    delcmd.Connection = delConn; 
    delcmd.Parameters.AddWithValue("@CustName", textBox4.Text); 
    delcmd.ExecuteNonQuery(); 
    MessageBox.Show("Customer has been successfully removed!"); 
} 
catch(Exception exc) 
{ 
    MessageBox.Show("Error: "+exc.Message); 
} 
+0

請提供完整示例,以便清晰 –

+0

我做了修改。但沒有成功。我仍然無法刪除條目。它不顯示任何錯誤,但同時它也不會刪除。 –

+0

你確定你的參數是正確的嗎?我的意思是,在查詢編輯器中,如果您鍵入查詢SELECT * FROM NavColl WHERE CustName ='您的客戶名'是否會返回ligne? –

0

試試下面的代碼

你必須PASA ?作爲參數的名稱,而不是[CusName]

String delQuery = "DELETE FROM NavColl WHERE [CusName]= ?"; 
    OleDbCommand delcmd = new OleDbCommand(); 
    delcmd.CommandText = delQuery; 
    delcmd.Connection = delConn; 
    delcmd.Parameters.AddWithValue("?", textBox4.Text); 
    delcmd.ExecuteNonQuery(); 
+2

OleDb不使用命名參數。它只是有?佔位符,並且必須根據佔位符的位置/順序與參數集合中項目的順序進行比較來匹配參數值。 –

+0

那麼,我做了修改。但沒有成功。數據仍在數據庫中。代碼執行時不顯示任何錯誤。但與此同時,它並沒有達到它應有的水平。你能幫忙嗎? –

+0

@JoelCoehoon你是對的,它是將參數添加到Sqlcommand而不是OledbCommand的方式。我修好了它。 Thx很多 – Hadi