2016-08-17 17 views
0

I Mitglied Wartungscode erstellt haben, abzurufen, in dem ich die Mitglieder ID, Name abruft und alle grundlegenden Dinge Mein Code ist wie folgt:Der Versuch, Parameterwert aus einer anderen Klassenbibliothek

private void Mem_Maintenance_Load(object sender, EventArgs e) 
{ 
    try 
    { 
     txt_mem_id.Text = Generate_no.gen_no("MEM").ToString(); 
    } 
    catch(Exception Ex) 
    { 
     MessageBox.Show("Error\n\n"+Ex.ToString()); 
    } 
} 

I eine Bibliothek namens Classlibrary, dessen Code erstellt haben wird wie folgt

namespace LIBRARY 
{ 
public class Generate_no 
{ 
    public static int gen_no(string P_PRM_TYPE) 
    { OleDbConnection connection = new OleDbConnection(); 
     connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\arekh\MS Access\soc_data.accdb;Persist Security Info=False;"; 
     connection.Open(); 
     int v_last_no = 0; 
     OleDbCommand command = new OleDbCommand(); 
     command.Connection = connection; 
     string query = @"select PARM_VALUE from soc_parm_mast where PARM_TYPE = '" + P_PRM_TYPE + "';"; 
     command.CommandText = query; 
     OleDbDataReader reader = command.ExecuteReader(); 
     reader.Read(); 
     v_last_no = Int32.Parse(reader["PARM_VALUE"].ToString()) + 1; 
     reader.Close(); 
     command.CommandText = @"update soc_parm_mast set PARM_VALUE = PARM_VALUE+1 where PARM_TYPE = " + P_PRM_TYPE + ";"; 
     command.ExecuteNonQuery(); 
     connection.Close(); 
     return v_last_no; 
    } 
} 
} 

Aber während der Ausführung kommt ein Fehler auf

System.FormatException: Eingabezeichenfolge war nicht falsches Format bei LIBRARY.Generate_no.gen_no (String P_PRM_TYPE)

+0

Keine Antwort, aber - Bitte verwenden Sie keine String-Verkettung, um SQL-Abfragen zu erstellen. Es ist anfällig für SQL-Injektionen. Verwenden Sie [Parameterized Queries] (https://msdn.microsoft.com/en-us/library/bb738521 (v = vs.100) .aspx) –

+0

Ich habe es in anderen Programmen versucht.Es funktioniert ordnungsgemäß.Was ist das Problem mit Verkettung. ?? –

+0

Ya wird es natürlich funktionieren, aber wie ich gerade gesagt habe ... SQL-Injektionen - look it up –

Antwort

0
command.CommandText = @"update soc_parm_mast set PARM_VALUE = PARM_VALUE+1 where PARM_TYPE = '" + P_PRM_TYPE + "';"; 

Sie wurden in der Update-Anweisung

+0

Ich glaube nicht, dass 'System.FormatException' verursachen wird –

+0

Nichts ist in den Fehler geändert. –

0
die einfachen Anführungszeichen fehlt

Die Linie v_last_no = Int32.Parse(reader["PARM_VALUE"].ToString()) + 1; verursacht den angegebenen Fehler, die Int32.Parse wird FormatException werfen, wenn der Eingang nicht konvertierbar ist. Daher rate ich Ihnen dringend, Int32.TryParse() zu verwenden. Dann wird der Code wie folgt aus:

public static int gen_no(string P_PRM_TYPE) 
{ 
    using (OleDbConnection connection = new OleDbConnection(@"Connection string here")) 
    { 
     connection.Open(); 
     int v_last_no = 0; 
     using (OleDbCommand command = new OleDbCommand()) 
     { 
      command.Connection = connection; 
      string query = @"select PARM_VALUE from soc_parm_mast where PARM_TYPE = @P_PRM_TYPE"; 
      command.CommandText = query; 
      command.Parameters.AddWithValue("@P_PRM_TYPE", P_PRM_TYPE); 
      OleDbDataReader reader = command.ExecuteReader(); 
      reader.Read(); 
      if (!Int32.TryParse(reader["PARM_VALUE"].ToString(), out v_last_no)) 
      { 
       // Conversion failed, Show message if needed  
       // v_last_no will be 0 
      } 
      reader.Close(); 
     } 
     using (OleDbCommand command = new OleDbCommand()) 
     { 
      command.CommandText = @"update soc_parm_mast set PARM_VALUE = PARM_VALUE+1 where PARM_TYPE [email protected]_PRM_TYPE"; 
      command.Parameters.AddWithValue("@P_PRM_TYPE", P_PRM_TYPE); 
      command.ExecuteNonQuery(); 
     } 
    } 

    return v_last_no; 
} 

Noch eine Beratung für Sie: von SQL Injection Vorsicht während der verketteten Zeichenfolge als Abfragen. Verwenden Sie stattdessen parametrisierte Abfragen.

+0

Entschuldigung Sir, ich verstehe nicht, was Sie sagen. Ich bin ein Anfänger. –

+0

'if (! Int32.TryParse (Leser [" PARM_VALUE "]. ToString(), aus v_last_no)) { MessageBox.Show (" Fehler \ n \ n "+ Ex.ToString()); v_last_no = 999; } v_last_no = v_last_no + 1; ' –

+0

@ A.Tiwari: werfen Sie einen Blick in die Updates –

Verwandte Themen