我正在尝试将PullConstants类中的属性拉到CreateForecast类。在CreateForecast中,我使用此代码创建了一个PullConstants实例。我还验证了这两个类都在同一名称空间中。
PullConstants pc = new PullConstants();
但是,当我尝试使用下面的代码将PullConstants中的值拉到CreateForecast时,我总是收到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();
}
}
}
}
答案 0 :(得分:2)
我猜你错过了对PullConstantValues
的调用:
PullConstants pc = new PullConstants();
pc.PullConstantValues();
double sla = pc.sla;
如果提供这些值是此类的唯一目的,您最好将其用作构造函数:
class PullConstants
{
/* ... */
public PullConstants() // instead of 'void PullConstantValues()'
{
/* ... */
}
}
如果是“真实常量”,也可以使用单例来不每次查询数据库。
答案 1 :(得分:0)
要么您缺少对此功能的调用
public void PullConstantValues();
或者您可以考虑通过将此函数更改为
来使此函数成为构造函数 public PullConstant();