2014-06-13 3 views
1

PullConstants 클래스의 속성을 CreateForecast 클래스로 가져 오려고합니다. CreateForecast에서이 코드로 PullConstants의 인스턴스를 만들었습니다. 두 클래스가 동일한 네임 스페이스에 있음을 확인했습니다. 나는 아래의 코드로 CreateForecast하는 PullConstants에서 값을 끌어 할 때클래스에서 당기기 속성

PullConstants pc = new PullConstants(); 

하지만, 난 항상 값이 제대로 데이터베이스에서 뽑아 가져옵니다 0

double sla = pc.sla; 

내가 확인한받을 수 있지만 그것의 범위는 클래스의 첫 번째 실행을 넘어서지 않는 것으로 보인다. 정확히 내가 PullConstants에서 올바른 속성 값을 가져올 수 없다는 점을 잘못하고 있습니까?

PullConstants 클래스는 다음과 같다 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using MySql.Data.MySqlClient; 

namespace ForecastBuilder 
{ 
    class PullConstants 
    { 
     InitializeDB idb = new InitializeDB(); 
     ErrorLogger el = new ErrorLogger(); 

     public double sla { get; set; } 
     public int serviceTime { get; set; } 
     public int avgHandleTime { get; set; } 
     public int maxWait { get; set; } 
     public double shrinkageAdjustment { get; set; } 
     public double alpha { get; set; } 
     public double beta { get; set; } 
     public double specialDayPerInc { get; set; } 

     public void PullConstantValues() 
     { 
      idb.OpenDatabases(); 

      try 
      { 
       string sqlConstants = "select * from forecastconstants"; 
       MySqlCommand cmdConstants = new MySqlCommand(sqlConstants, idb.myconn); 
       MySqlDataReader rdrConstants = cmdConstants.ExecuteReader(); 
       while (rdrConstants.Read()) 
       { 
        sla = double.Parse(rdrConstants["SLA"].ToString()); 
        serviceTime = int.Parse(rdrConstants["ServiceTime"].ToString()); 
        avgHandleTime = int.Parse(rdrConstants["AvgHandleTime"].ToString()); 
        maxWait = int.Parse(rdrConstants["MaxWait"].ToString()); 
        shrinkageAdjustment = double.Parse(rdrConstants["ShrinkageAdjustment"].ToString()); 
        alpha = double.Parse(rdrConstants["Alpha"].ToString()); 
        beta = double.Parse(rdrConstants["Beta"].ToString()); 
        specialDayPerInc = double.Parse(rdrConstants["SitCallIncrPer"].ToString()); 
       } 
      } 
      catch (Exception e) 
      { 
       el.createError(2, e.ToString(), "Could not pull constants"); 
      } 
      finally 
      { 
       idb.myconn.Close(); 
      } 
     } 
    } 
} 
+1

로 변경하여이 기능을 생성자을 고려할 수 있습니다 더블? 왜 단순히'sla = Convert.ToDouble (rdrConstants [ "SLA"])'를 호출하지 않는가? 그 *** *** *** 문제를 해결할 수 있습니다. –

답변

2

난 당신이 PullConstantValues에 전화를 누락 같아요

PullConstants pc = new PullConstants(); 
pc.PullConstantValues(); 
double sla = pc.sla; 

이 값을 제공하는 것은 당신이 더 나은 수도 클래스의 유일한 목적 일 경우 생성자로 사용하는 경우 :

class PullConstants 
{ 
    /* ... */ 

    public PullConstants() // instead of 'void PullConstantValues()' 
    { 
     /* ... */ 
    } 
} 

"실제 상수 "는 매번 DB를 쿼리하지 않기 위해 싱글 톤을 사용할 수도 있습니다. 당신이에 다음 문자열로 변환하는 이유는

+0

이것은 맞습니다. 이전에 다른 클래스에서 PullConstants 클래스를 호출하여 해당 값을 저장하도록했습니다. 어리석은 것처럼 들리 겠지만 프로그래밍에 익숙하지 않습니다. 귀하의 답변을 주셔서 감사합니다 그리고 난 확실히 생성자를 사용하여 볼 것입니다. –

0

어느 쪽이 기능

public void PullConstantValues(); 

에 전화를 misssing하거나 당신은

public PullConstant();