在控制台应用程序 C# 的对象中保存值
Holding Values in an object for console application C#
我目前正在编写一个应用程序,我从数据库中获取数据并将其传递给稍后将用于将数据发送到其他地方的对象。我在测试中遇到的问题是数据不保存在对象中,因为稍后使用它时,我得到空值错误。我知道我们可以将这些存储在会话中,但我也知道您可以使用对象并且在以前的工作中已经这样做过,但不记得我缺少什么来维护信息。在作业完成之前,我是否需要将对象从一个方法传递到另一个方法?
这里的第一个示例显示了它准备对象的位置。
public void FtpInitialize()
{
_LogController.LogToFile(ValidateMessage.BeginInitialization);
//Loading FTPClient object with ClientInfo Object data we got from DataBase. FTPClient object is the object that sends the data.
_LogController.FTPTraceLogToFile();
ClientInfo = _RepositoryController.GetClientInfo(ClientInfo);
if (ClientInfo == null)
ClientInfo.ClientDataExists = false;
else
{
FTPClient.Host = ClientInfo.Host;
FTPClient.Port = ClientInfo.Port;
FTPClient.EncryptionMode = FtpEncryptionMode.Explicit;
FTPClient.Credentials = new NetworkCredential(ClientInfo.UserName, ClientInfo.Password);
FTPClient.DataConnectionType = FtpDataConnectionType.EPSV; //according library documentation, auto passive is broken as of 10/20/2016
FTPClient.EnableThreadSafeDataConnections = ClientInfo.EnableThreadSafeConnection;
FTPClient.DataConnectionConnectTimeout = ClientInfo.DataConnectionTimeout;
FTPClient.DataConnectionReadTimeout = ClientInfo.DataReadTimeout;
FTPClient.ConnectTimeout = ClientInfo.ConnectionTimeout;
FTPClient.ReadTimeout = ClientInfo.ReadTimeout;
FTPClient.SocketPollInterval = ClientInfo.SocketPollInterval;
FTPClient.SocketKeepAlive = ClientInfo.KeepSocketAlive;
FTPClient.ValidateCertificate += new FtpSslValidation(OnValidateCertificate);
_LogController.LogToFile(ValidateMessage.ClientDataLoaded);
ClientInfo.ClientDataExists = true;
}
}
然后下面当我点击这部分时,它显示为空
public bool SendData()
{
short errorCount = 0;
using (FTPClient)
{
if (ClientInfo.ClientDataExists)
{
您似乎在方法中使用了局部变量。这就是为什么数据"disappears".
例如,如果您要从数据库中提取数据,您应该有某种模型 class 和容器,以便数据可以持续存在,直到您完成处理。
EX:您有一个包含人员信息(姓名、出生日期等)的数据库。
你应该有一个 class 来定义人,可能还有一个列表来存储所说的人。您调用您的数据库并将 X 人对象拉入您的 List 变量。然后,您可以将 List 传递到方法中。注意:如果您一次只做一个,则可以放弃列表(或您使用的任何集合)。
这个的实现实际上取决于您希望对象如何持久化。如果你知道你一次只会拉一个人对象,你可以从数据库中声明 var databasePerson。如果您要提取更多信息,请使用列表,然后在不满意时弹出该对象。
希望对您有所帮助。
我目前正在编写一个应用程序,我从数据库中获取数据并将其传递给稍后将用于将数据发送到其他地方的对象。我在测试中遇到的问题是数据不保存在对象中,因为稍后使用它时,我得到空值错误。我知道我们可以将这些存储在会话中,但我也知道您可以使用对象并且在以前的工作中已经这样做过,但不记得我缺少什么来维护信息。在作业完成之前,我是否需要将对象从一个方法传递到另一个方法?
这里的第一个示例显示了它准备对象的位置。
public void FtpInitialize()
{
_LogController.LogToFile(ValidateMessage.BeginInitialization);
//Loading FTPClient object with ClientInfo Object data we got from DataBase. FTPClient object is the object that sends the data.
_LogController.FTPTraceLogToFile();
ClientInfo = _RepositoryController.GetClientInfo(ClientInfo);
if (ClientInfo == null)
ClientInfo.ClientDataExists = false;
else
{
FTPClient.Host = ClientInfo.Host;
FTPClient.Port = ClientInfo.Port;
FTPClient.EncryptionMode = FtpEncryptionMode.Explicit;
FTPClient.Credentials = new NetworkCredential(ClientInfo.UserName, ClientInfo.Password);
FTPClient.DataConnectionType = FtpDataConnectionType.EPSV; //according library documentation, auto passive is broken as of 10/20/2016
FTPClient.EnableThreadSafeDataConnections = ClientInfo.EnableThreadSafeConnection;
FTPClient.DataConnectionConnectTimeout = ClientInfo.DataConnectionTimeout;
FTPClient.DataConnectionReadTimeout = ClientInfo.DataReadTimeout;
FTPClient.ConnectTimeout = ClientInfo.ConnectionTimeout;
FTPClient.ReadTimeout = ClientInfo.ReadTimeout;
FTPClient.SocketPollInterval = ClientInfo.SocketPollInterval;
FTPClient.SocketKeepAlive = ClientInfo.KeepSocketAlive;
FTPClient.ValidateCertificate += new FtpSslValidation(OnValidateCertificate);
_LogController.LogToFile(ValidateMessage.ClientDataLoaded);
ClientInfo.ClientDataExists = true;
}
}
然后下面当我点击这部分时,它显示为空
public bool SendData()
{
short errorCount = 0;
using (FTPClient)
{
if (ClientInfo.ClientDataExists)
{
您似乎在方法中使用了局部变量。这就是为什么数据"disappears".
例如,如果您要从数据库中提取数据,您应该有某种模型 class 和容器,以便数据可以持续存在,直到您完成处理。
EX:您有一个包含人员信息(姓名、出生日期等)的数据库。
你应该有一个 class 来定义人,可能还有一个列表来存储所说的人。您调用您的数据库并将 X 人对象拉入您的 List 变量。然后,您可以将 List 传递到方法中。注意:如果您一次只做一个,则可以放弃列表(或您使用的任何集合)。
这个的实现实际上取决于您希望对象如何持久化。如果你知道你一次只会拉一个人对象,你可以从数据库中声明 var databasePerson。如果您要提取更多信息,请使用列表,然后在不满意时弹出该对象。
希望对您有所帮助。