2017-02-02 3 views
1

Mein Code:Kann MS Access-Datenbank in C# nicht aktualisiert werden?

OleDbCommand cmd1 = new OleDbCommand("UPDATE student_info SET fee_due = @fee_due WHERE adm_no = @adm_no", con); 

cmd1.Parameters.AddWithValue("@adm_no", adm_no); 
cmd1.Parameters.AddWithValue("@fee_due", fee_due); 

int affect = cmd1.ExecuteNonQuery(); 

MessageBox.Show(affect.ToString()); 

Mein Code zeigt immer 0 Zeile jedes Mal betroffen, aber in meiner Datenbank sind die müssen eine Reihe sein, die

beeinflussen wird

Können Sie mir vorschlagen, wie ich dieses Problem debuggen?

+0

Versuchen Sie, die Parameter in der richtigen Reihenfolge Ihrer Aussage zu setzen. OleDB ist sehr wählerisch, wenn es um Parameter geht. Überprüfen Sie dies: http://StackOverflow.com/questions/15126427/oledb-update-command und das: http://StackOverflow.com/questions/30648602/oledb-update-command-not-changing-data –

Antwort

1

Da OleDB für MS Access benannte Parameter (nur Positionsparameter) nicht unterstützt, müssen Sie sehr vorsichtig sein, die Werte in der gleichen Reihenfolge bereitzustellen, in der Sie die Parameter definieren.

In Ihrem Fall listet die Aussage zuerst @fee_due, vor @adm_no - aber Sie liefern die Werte in der anderen Reihenfolge.

Code wie folgt ändern:

OleDbCommand cmd1 = new OleDbCommand("UPDATE student_info SET fee_due = @fee_due WHERE adm_no = @adm_no", con); 

// provide the value for @fee_due FIRST  
cmd1.Parameters.AddWithValue("@fee_due", fee_due); 

// provide the value for @adm_no only after @fee_due 
cmd1.Parameters.AddWithValue("@adm_no", adm_no); 

int affect = cmd1.ExecuteNonQuery(); 

MessageBox.Show(affect.ToString()); 
Verwandte Themen