2012-01-10 1 views
0

J'ai vraiment besoin d'aide concernant mon codage. Dans mon codage, j'ai besoin d'utiliser des variables statiques pour passer la valeur entre les fonctions et je ne sais vraiment pas comment le faire. Vraiment apprécier si quelqu'un peut m'aider à ce sujet. Merci.Comment passer un paramètre en utilisant une variable statique?

static String TypeOfReport; 
static DateTime DateOfExecution; 

static DateTime StartDate; 
static DateTime EndDate; 
static int SpokeCode; 

static void Main(string[] args) 
{ 
    DateTime start = System.DateTime.Now.AddMinutes(1); 
    Schedule.PeriodicSchedules schedule = new Schedule.PeriodicSchedules(start, Schedule.PeriodicSchedules.Frequency.Minutely); 
    schedule.Elapsed += new System.Timers.ElapsedEventHandler(GenerateReport); 
    schedule.Enabled = true; 

    Console.ReadLine(); 
} 

static void GenerateReport(object sender, EventArgs e) 
{ 
    if (TypeOfReport == "BillingReport") 
    { 
     Schedule.PeriodicSchedules s = new Schedule.PeriodicSchedules(DateOfExecution, Schedule.PeriodicSchedules.Frequency.Minutely); 
     s.Elapsed += new System.Timers.ElapsedEventHandler(hell); 

     crRpt.Load("C:\\rptBilling.rpt"); 
     ReportLogin(crRpt); 

     crRpt.SetParameterValue("@CollectionStartDate", StartDate); 
     crRpt.SetParameterValue("@CollectionEndDate", EndDate); 
     crRpt.SetParameterValue("@SpokeCode", SpokeCode); 
    }     
}    

static void ReportAccess() 
{ 
    SqlConnection thisConnection = new SqlConnection("data source=s3rosteam;initial catalog=ReportDB; integrated security=True; Pooling=False;"); 
    SqlCommand thisCommand = null; 

    try 
    { 
     String strSQL = "SELECT TypeO fReport,DateOfExecution,StartDate,EndDate,SpokeCode FROM dbo.Schedule WHERE TypeOfReport ='" + TypeOfReport + "', DateOfExecution = '" + DateOfExecution + "'"; 
     thisConnection.Open(); 
     thisCommand = new SqlCommand(strSQL); 
     thisCommand.Connection = thisConnection; 
     thisCommand.CommandType = CommandType.Text; 

     using (SqlDataReader reader = thisCommand.ExecuteReader()) 
     { 
      reader.Read(); 
      StartDate = Convert.ToDateTime(reader["StartDate"]); 
      EndDate = Convert.ToDateTime(reader["EndDate"]); 
      SpokeCode = Convert.ToInt16(reader["SpokeCode"]); 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.ToString()); 
    } 

    finally 
    { 
     thisCommand.Dispose(); 
     thisConnection.Close(); 
     thisCommand.Dispose(); 
    } 
} 
+7

Vous n'avez pas besoin de transmettre des paramètres lorsque vous utilisez des variables globales. –

+0

Essayez le lecteur ["StartDate"]. ToString() ou readerGetString ("VALUE"), par défaut le lecteur de données renvoie un objet. – Lloyd

+0

@srahifah avez-vous considéré l'exécution [concurrente] (http://www.ldoceonline.com/popup/popupmode.html?search_str=concurrent)? – ANeves

Répondre

0

Merci pour les suggestions. J'ai réussi à passer la valeur. Mais je n'utilise pas de variable statique.

static void GenerateReport() 
{ 
    string[] arrTypes = ReadReport().Split('~'); 

    foreach (string strReportType in arrTypes) 
    { 
     if (strReportType == "BillingReport") 
     { 
      while (ThisReader.Read()) 
      { 
       crRpt.SetParameterValue("@CollectionStartDate", ThisReader["StartDate"]); 
       crRpt.SetParameterValue("@CollectionEndDate", ThisReader["EndDate"]); 
       crRpt.SetParameterValue("@SpokeCode", ThisReader["SpokeCode"]); 
      } 
     }   
    } 
} 

static string ReadReport() 
{ 
    try 
    { 
     ………  
     using (SqlDataReader reader = thisCommand.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       strReturn += reader["TypeOfReport"].ToString() + "~"; 
      } 
      reader.Close(); 
     } 
     strReturn = strReturn.Remove(strReturn.Length - 1);     

    } 
    catch (Exception ex) 
    { } 

    finally 
    { } 
    return strReturn; 
} 
0

Vous n'avez pas besoin de déclarer chaque fonction comme statique. Au lieu de cela, vous pouvez faire quelque chose comme:

internal class MyReportGenerator 
{ 
    // Private member variables 
    private int someVar; 

    // Public properties 
    public string TypeOfReport { get; set; } 

    // Constructor 
    public MyReportGenerator(string s, int i) 
    { 
     // Here you can initialize your member variables 
    } 

    // Methods 
    void GenerateReport(string otherParams) 
    { 
    } 

    public static void Main(string[] args) 
    { 
     // Setup the report generator, scheduler, etc 
     MyReportGenerator generator = new MyReportGenerator(...); 
     generator.GenerateReport(...); 
    } 
} 
Questions connexes