2016-03-21 14 views
2

im Versuch, eine Zeile in meiner Datenbank zu aktualisieren gestion_concour mit C#Daten zu lange in Zeile 1

private void Modifier_Concour_Click(object sender, RoutedEventArgs e) 
{ 
    string input_Code = Code.Text; 
    string input_Des = Des.Text; 
    string input_Spe = Spe.Text; 
    string selected = ConcourList.Text; 
    MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder(); 
    builder.Server = "127.0.0.1"; 
    builder.UserID = "root"; 
    builder.Password = "root"; 
    builder.Database = "gestion_concour"; 
    MySqlConnection connection = new MySqlConnection(builder.ToString()); 
    connection.Open(); 
    string query = "update gestion_concour.concour set Code = @N_Code, Designation = @N_Des, Specialite = @N_Spe where Code = @A_Code"; 
    MySqlCommand mcmd = new MySqlCommand(query, connection); 
    mcmd.Parameters.AddWithValue("@A_Code", selected); 
    mcmd.Parameters.AddWithValue("@N_Code", input_Code); 
    mcmd.Parameters.AddWithValue("@N_Des", input_Des); 
    mcmd.Parameters.AddWithValue("@N_Spe", input_Spe); 
    MySqlDataReader myReader; 
    try 
    { 
     myReader = mcmd.ExecuteReader(); 
     while (myReader.Read()) 
     { 
     } 
     Code.Clear(); 
     Des.Clear(); 
     Spe.Clear(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
    connection.Close(); 
    Fill_Combo(); 
    fill_grid(); 
} 

ich die Textbox füllen genannt, so dass die Abfrage wie

update gestion_concour.concour set Code = 'CAEPST', Designation = 'Concours Accées a EPST', Specialite = 'EPST' where Code = '3'; 

und ich habe diesen geht Error Ich habe versucht, die Abfrage in Woekbench übergeben und es funktioniert gut. also was ist das prob (Code ist VARCHAR (10))

+2

'mcmd.Parameters.AddWithValue ("@ N_Code", input_Des);' sieht falsch – wimh

+0

Ich nehme an, dass Ihr Problem leider – Steve

+0

@Wimmel Zugabe einfach behoben werden kann @ IlyesGHOMRANI was ist der Wert von 'input_Code'? –

Antwort

1

ich wahrscheinlich diese Dinge tun würde, um herauszufinden, was schief gelaufen ist -

  1. die Datenbank Überprüfen Sie, ob Code Spalte wirklich varchar (10) ist.
  2. Wenn ja, dann versuchen Sie, den Wert der Zeichenfolge input_Code zu überprüfen, wenn es wirklich "CAEPST" ist.
  3. Wenn es überprüft, dann stellen Sie sicher, das Textfeld vor dem Einfügen zu trimmen.
  4. Sie können auch testen, nur die Spalte zu aktualisieren.
  5. Eine andere Möglichkeit ist, dass wir die tatsächliche Textbox als Ihren Wert verwenden können. So - mcmd.Parameters.AddWithValue("@N_Code", Code.Text.ToString());

  6. Oder wir können auch es so zu tun, nur um zu sehen, ob es wirklich durch geht - mcmd.Parameters.AddWithValue("@N_Code", "CAEPST");

Hoffe, es hilft. :)

1

Nun, Sie verwenden ExecuteReader. Wenn Sie ein Update-Befehl exec möchten, sollten Sie ExecuteNonQuery verwenden .So es sein würde:

try 
{ 
    int i = mcmd.ExecuteNonQuery(); 
} 

Auch diese Zeilen scheint falsch:

mcmd.Parameters.AddWithValue("@N_Code", input_Des); 
mcmd.Parameters.AddWithValue("@N_Des", input_Des); 

Es scheint, dass Sie die Bezeichnung anstelle des Codes hinzufügen . Wahrscheinlich sollte es sein:

mcmd.Parameters.AddWithValue("@N_Code", input_Code); 

Dies zu ändern ist auch nicht schaden, nur um sicherzustellen, dass es keine Leerzeichen hinter das Problem verursacht:

string input_Code = Code.Text.Trim(); 
string input_Des = Des.Text.Trim(); 
string input_Spe = Spe.Text.Trim(); 
string selected = ConcourList.Text.Trim(); 
+0

Korrekt, aber das behebt das Problem kaum – Steve

+0

wie man es ändert ?? Entschuldigung, ich bin neu –

+0

Sie haben Recht @Steve ..bearbeitet – Pikoh

1

Es sieht aus wie Sie die falsche Variable verwenden für du Parameter. Versuchen

mcmd.Parameters.AddWithValue("@N_Code", input_Code); 

statt

mcmd.Parameters.AddWithValue("@N_Code", input_Des); 
+0

immer noch das gleiche Problem –

+0

@IlyesGHOMRANI was ist der Wert von 'input_Code'? – user1666620

+0

input_code = CAEPST –

Verwandte Themen