2016-07-23 9 views
0

Mein Code:Datentabelle C# Eingabezeichenfolge war nicht in einem korrekten Format

DataTable dt = new DataTable(); 
mySqlDataAdapter.Fill(dt); 
int socot = dt.Rows.Count; 
for (int i = 0; i < socot; i++) 
{ 
    String dn = dt.Rows[i][1].ToString(); 
    String gduan = "SELECT tennha FROM duannha WHERE [email protected]"; 
    MySqlCommand cmd = new MySqlCommand(); 
    cmd.Connection = conn; 
    cmd.CommandText = gduan; 
    cmd.Parameters.AddWithValue("@id", dn); 
    String gtennha = cmd.ExecuteScalar().ToString(); 
    dt.Rows[i][1] = gtennha; 
} 

Wenn ich Code ausführen, ich einen Fehler empfangen. Bitte hilf mir, es zu beheben.

error

+0

Sie möchten String in die Variable Int32 einfügen. Dann konvertieren Sie es zunächst mit Int32.Parse. –

+0

Wenn Sie sich die Fehlermeldung ansehen, werden Sie feststellen, dass der Rückgabewert von ExecuteScalar nicht einer Spalte vom Typ Integer zugeordnet werden kann. Also ist hier wirklich etwas kaputt. Oder Sie haben eine ungültige Spalte aus Ihrer Datentabelle ausgewählt (die Spalte bei Index 1) oder Sie erhalten einen anderen Wert als Ihre Abfrage oder versuchen, den Rückgabewert Ihrer Abfrage in der falschen Spalte zuzuweisen (immer noch die Spalte bei Index 1)) – Steve

+0

Vergessen Sie nicht den 'using' Block für' cmd' – Drew

Antwort

1

Typ Erwartet als Int32

Wenn gtennha eine Zahl enthält, können Sie es zu einem int analysieren. Mit mehr Garantien:

var gtennha = cmd.ExecuteScalar(); 
try 
{ 
    if(gtennha != null) 
     dt.Rows[i][1] = int.Parse(gtennha.ToString()); 
    else 
     Console.WriteLine("Error: Query didn't return a result."); 
} 
catch(FormatException ex) 
{ 
    Console.WriteLine("Error: Couldn't parse 'gtennha' to a number."); 
    /* more error handling */ 
} 
+1

versuchen, parse mehr sicherer als parse – Mostafiz

1

Parse String in int

DataTable dt = new DataTable(); 
     mySqlDataAdapter.Fill(dt); 
     int socot = dt.Rows.Count; 
     for (int i = 0; i < socot; i++) 
     { 
      String dn = dt.Rows[i][1].ToString(); 
      String gduan = "SELECT tennha FROM duannha WHERE [email protected]"; 
      MySqlCommand cmd = new MySqlCommand(); 
      cmd.Connection = conn; 
      cmd.CommandText = gduan; 
      cmd.Parameters.AddWithValue("@id", dn); 
      String gtennha = cmd.ExecuteScalar().ToString(); 
      int a; 
      int.TryParse(gtennha, out a); 
      dt.Rows[i][1] = a; 
     } 

aktualisieren

wenn gtennha immer mit VIOFFICE oder ein Wort so etwas beginnen dann verwenden diese Art und Weise geteilt String

DataTable dt = new DataTable(); 
     mySqlDataAdapter.Fill(dt); 
     int socot = dt.Rows.Count; 
     for (int i = 0; i < socot; i++) 
     { 
      String dn = dt.Rows[i][1].ToString(); 
      String gduan = "SELECT tennha FROM duannha WHERE [email protected]"; 
      MySqlCommand cmd = new MySqlCommand(); 
      cmd.Connection = conn; 
      cmd.CommandText = gduan; 
      cmd.Parameters.AddWithValue("@id", dn); 
      String gtennha = cmd.ExecuteScalar().ToString(); 
      int a; 
      int.TryParse(gtennha.Split(' ')[1], out a); 
      dt.Rows[i][1] = a; 
     } 
+0

Aber "gtennha" hatte Wert "VIOFFICE 124". –

+0

@gocuong immer mit VIOFFICE beginnen? – Mostafiz

+0

@ngocuong siehe mein update – Mostafiz

0

Ich glaube, Sie haben die falsche Spalte ausgewählt, um den Rückgabewert Ihrer ExecuteScalar-Abfrage zuzuweisen. Aus Ihrer Fehlermeldung wird deutlich, dass der Rückgabewert eine Zeichenfolge "VI BUILDING 29BD" (oder etwas in der Art) ist und Sie versuchen, diesen Wert der gleichen Spalte dt.Rows[i][1] zuzuweisen, die Sie als Quelle für den ID-Parameter verwendet haben. Das kann natürlich nicht stimmen.

Sie müssen also erkennen, was die Spalte, die Sie den Rückgabewert des ExecuteScalar zuweisen möchten, und besonders darauf zu achten, dass die Rückgabewert für den Umgang, die NULL sein könnte, wenn es keine Übereinstimmung auf der WHERE-Klausel ist

DataTable dt = new DataTable(); 
mySqlDataAdapter.Fill(dt); 
int socot = dt.Rows.Count; 
for (int i = 0; i < socot; i++) 
{ 
    String dn = dt.Rows[i][1].ToString(); 
    String gduan = "SELECT tennha FROM duannha WHERE [email protected]"; 
    MySqlCommand cmd = new MySqlCommand(); 
    cmd.Connection = conn; 
    cmd.CommandText = gduan; 
    cmd.Parameters.AddWithValue("@id", dn); 
    object result = cmd.ExecuteScalar(); 

    // SUPPOSE THAT YOU WANT TO ASSIGN AT COLUMN 2 NOT STILL AT COLUMN 1 
    if(result != null) 
     dt.Rows[i][2] = gtennha; 
}