2016-11-29 14 views
-3

私は現在、DBからデータを取得してオブジェクトに渡すアプリケーションを作成していますが、そのオブジェクトを後で他の場所からデータを送信するために使用します。私がテストで抱えている問題は、後で使用するときにデータがオブジェクトに保持されないということです。ヌル値のエラーが発生します。セッションでこれらを保存できることはわかっていますが、オブジェクトを使用して前のジョブで以前に行ったことも知っていますが、情報を保持するために欠けているものを思い出さないでください。ジョブが完了するまでメソッドからメソッドにオブジェクトを渡す必要がありますか?コンソールアプリケーションのオブジェクトの値を保持する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

オブジェクトがDBから作成されていることをどのように知っていますか? –

+0

テストを実行すると、オブジェクトに情報をロードするメソッドが作成されますが、情報はその外部にドロップされます。 – ggiaquin16

答えて

0

としてnullを示しています。これがデータが「消える」理由です。

たとえば、データベースからデータを取り出す場合は、モデルクラスとコンテナを用意して、データを処理するまでデータを保持できるようにする必要があります。

EX:あなたは人に関する情報(名前、dobなど)を含むデータベースを持っています。

人を定義するクラスと、その人を格納するためのリストが必要です。あなたのデータベースを呼び出して、X人物オブジェクトをList変数に引っ張ります。リストにメソッドを渡すことができます。注:List(または使用しているコレクション)は、一度に1つずつ実行している場合は削除できます。

これの実装は、オブジェクトの永続化方法に大きく依存します。一度に1人のオブジェクトのみを取得することがわかっている場合は、データベースからvar databasePersonを宣言できます。より多くの情報を引き出し、オブジェクトがダウンしているときにオブジェクトをポップする場合は、リストを使用します。

希望に役立ちます。

+0

ああ!私はリストの部分が私が欠けているものだと信じています。あなたが説明したように、リストにはなく、インスタンス化されたオブジェクトに直接的に説明されているように、私は他にもすべてを持っています。私はオブジェクトがグローバルに保持されていないと思いますか? – ggiaquin16

+0

@ggiaquinオブジェクトを宣言する場所によって異なります。 これがワークフローの場合。 DB - >オブジェクト - > DoWork - >リピートオブジェクトは必要なくなりました。 mainwindow.cs内で、クラス全体でスコープを持つ変数を宣言します。 ワークフローが複数の呼び出しと並行してDB - >オブジェクト - > DoWorkの場合。リストを宣言し、オブジェクトをリスト、配列などに追加します。 どちらの場合でも、オブジェクトまたはリストをメインウィンドウの始めに定義して、そのスコープがプロジェクト全体になるようにする必要があります。 EX: 'public List =新しいリスト();' – peterpep

関連する問題