我正在编写一个应用程序,我从数据库中获取数据并将其传递给对象,该对象稍后将用于将数据发送到其他位置。我在测试中遇到的问题是数据不能保存在对象中,就像以后使用时一样,我得到空值错误。我知道我们可以将它们存储在会话中,但我也知道你可以使用对象并在以前的工作之前完成它,但是不记得我缺少什么来维护信息。我是否需要将对象从方法传递给方法直到作业完成?
此处的第一个示例显示了准备对象的位置。
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;
}
}
然后在我点击此部分时,它显示为null
public bool SendData()
{
short errorCount = 0;
using (FTPClient)
{
if (ClientInfo.ClientDataExists)
{
答案 0 :(得分:0)
这看起来就像是在方法中使用局部变量。这就是数据“消失”的原因。
例如,如果要从数据库中提取数据,则应该使用某种模型类和容器,以便数据可以持续存在,直到完成为止。
EX:您有一个包含人员信息的数据库(名称,dob等)。
你应该有一个定义人的类,可能还有一个List来存储所述人。您调用数据库并将X person对象拉入List变量。然后,您可以将List传递给方法。注意:如果你一次只做一个,你可以抛弃List(或你使用的任何集合)。
这的实现实际上取决于您希望对象如何持久化。如果您知道一次只能拉一个人对象,则可以从数据库中声明var databasePerson。如果您要提取更多信息,请使用列表,然后在关闭对象时弹出对象。
希望有所帮助。