2016-11-29 4 views
-3

В настоящее время я пишу приложение, в котором я получаю данные из БД и передавая его объекту, который позже будет использоваться для отправки данных с другого места. Проблема, которую я испытываю в тестировании, заключается в том, что данные не хранятся в объекте, поскольку, когда он используется позже, я получаю ошибки с нулевым значением. Я знаю, что мы можем хранить их в сеансах, но я также знаю, что вы можете использовать объекты и делали это раньше на предыдущих работах, но не помните, что мне не хватает для поддержания информации. Мне нужно передать объект (ы) от метода к методу до тех пор, пока работа не будет выполнена?Холдинг Значения в объекте для консольного приложения 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) 
      { 
+4

Можете ли вы добавить образец кода, который показывает, что вы пытаетесь сделать? – stannius

+0

Откуда вы знаете, что объект заполняется из БД? –

+0

уверен, что я могу предоставить образец, насколько я знаю, что он заполняется, когда я запускаю свой тест, мой метод, который загружает информацию в объект, заполняется, но информация удаляется вне этого. – ggiaquin16

ответ

0

Это выглядит, как вы используете локальные переменные в своих методах. Вот почему данные «исчезают».

Например, если вы извлекаете данные из своей базы данных, у вас должен быть какой-то класс модели и контейнер, чтобы данные могли сохраняться до тех пор, пока вы не закончите с ним.

EX: У вас есть база данных, содержащая информацию о людях (имя, dob и т. Д.).

У вас должен быть класс, определяющий человека и, возможно, список для хранения указанных людей. Вы вызываете свою базу данных и вытаскиваете объекты X person в свою переменную List. Затем вы можете передать свой список в методы. Примечание. Вы можете вырезать список (или любую коллекцию, которую вы используете), если вы делаете это по одному за раз.

Реализация этого действительно зависит от того, как вы хотите, чтобы объекты сохранялись. Если вы знаете, что вы потянете только один объект за один раз, вы можете объявить var databasePerson из базы данных. Используйте List, если вы будете извлекать больше информации, а затем выталкиваете объект, когда вы с ним работаете.

Надеюсь, что это поможет.

+0

ой! Я верю, что часть списка - это то, что мне не хватает. У меня есть все остальное, как вы объясняли по большей части, просто не в список, а скорее непосредственно в экземпляр объекта. Думаю, объект не держится в глобальном масштабе? – ggiaquin16

+0

@ggiaquin Это зависит от того, где вы объявляете объект. Если это рабочий процесс. DB -> объект -> DoWork -> Repeat. Больше не нужен объект. Объявите переменную в вашем mainwindow.cs, которая имеет область видимости по всему классу. Если , если рабочий процесс DB -> объект -> DoWork параллельно с несколькими вызовами. Объявите список и добавьте объекты в список, массив и т. Д. Но в любом случае вам нужно определить объект или список в начале основного окна, чтобы его область охвата находилась во всем проекте. EX: 'public List = новый Список ();' – peterpep