2017-10-06 9 views
0

を使用して、私はよく私を務めている方法を持っていますが、今のクエリを変更し、ている私は、これはクライアントマシンのいくつかが上であるという事実を許容するためにCommandTimeoutのを追加する必要があります実行されたのは少し不十分です。私が持っている問題は、CommandTimeoutを追加しても機能しないので、行を使用していることです。C#CommandTimeoutのステートメント発行し

プログラムは、毎晩SFTPサーバーからクエリを取得し、クライアントDBに対してクエリを実行し、その結果をファイルに書き込み、その結果をSFTPサーバーに返します。

クライアントマシンでのクエリの効率(読み取り専用アクセス)を向上させることができないため、このメソッドが残っています。

public void DumpTableToFile(string connection, string destinationFile, string QueryToExec) 
    { 
     string logDirectory = VariableStorage.logDirectory; 
     string Practice = VariableStorage.Practice; 

     try 
     { 
      SqlConnection conn = new SqlConnection(connection); 
      conn.Open(); 

      using (var command = new SqlCommand(QueryToExec, conn)) 
      using (var reader = command.ExecuteReader()) 

      using (var outFile = File.CreateText(destinationFile)) 
      { 
       string[] columnNames = GetColumnNames(reader).ToArray(); 
       int numFields = columnNames.Length; 
       outFile.WriteLine(string.Join("\t", columnNames)); 
       if (reader.HasRows) 
       { 
        while (reader.Read()) 
        { 
         string[] columnValues = 
          Enumerable.Range(0, numFields) 
             .Select(i => reader.GetValue(i).ToString()) 
             .Select(field => string.Concat("", field.Replace("\"", "\"\""), "")) 
             .ToArray(); 

         outFile.WriteLine(string.Join("\t", columnValues)); 
        } 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      Program log = new Program(); 
      log.WriteToLog(" Error: " + e); 
      SendEmailReport(Practice + " - Data Collection Error", " Error: " + e); 
     } 
    } 

答えて

0

OK、答えを見つけました。 Usingステートメントを削除する必要がありました。

  var command = new SqlCommand(QueryToExec, conn); 
      command.CommandTimeout = 300; 
      var reader = command.ExecuteReader(); 
      var outFile = File.CreateText(destinationFile); 
関連する問題