2017-10-02 12 views
0

を作成するC#Entity FrameworkのタイムアウトがEF 6.0VS 2015のDataTable

私は恐ろしい仕事を自動化しようとしています:各シートは、別のクエリの結果である複数シートのExcelブックを作成します。まず、自分のソリューションを動かさずにこれを行う既存の自動方法がある場合は、私に知らせてください。それ以外の場合:

私は、私は次の操作を行い、それぞれのクエリ文字列のため、その後毎のシートのクエリのコレクションを構築:私はかなりだExecution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding

... 
    "query" passed in as string above 
    ... 

    DataTable dt; 
    using (var db = new MyDbEntities()) { 
     db.Database.CommandTimeout = 180; 

     try { 
      dt = db.DataTable(query); 
     } catch (Exception e) { 
      throw new Exception("Datatable creation failed: " + e.Message); 
     } 
    } 

    ... 
    create spreadsheet-sheet 
    ... 

私は例外を引き起こすもののクエリを持っています180秒のタイムアウトが切れる前にタイムアウトを取得していることを確認してください。私の時計でそれを計時すると、DataTablesコールはCommandTimeoutを無視しているようです。約30秒後にタイムアウトしたようです。問題のクエリが要求された

EDIT

。それは次のとおりです。それは継承されました。それは醜いです。それは遅いブタです。これは、リモートのリンクされたOracle DBと2つの "ローカル" DBからクエリを実行しています。 SSMSから実行すると、完了するまでに数分かかりますが、完了します。

SELECT 
      UPPER(LOCAL_CONSUMER_TABLE.machine) AS machine, 
      UPPER(LOCAL_CONSUMER_TABLE.personId) AS personId, 
      Persons.LastName AS lastName, 
      Persons.FirstName AS firstName 
    FROM 
    (
     SELECT 
       GROUP_USER_ACCOUNT.UAC_ITU__ID 
     FROM 
      ORACLE_LINKED_SERVER..CONSUMER_TABLE.GROUP_USER_ACCOUNT AS GROUP_USER_ACCOUNT 
     WHERE GROUP_USER_ACCOUNT.UAC_ITU__ID IN 
     (
      SELECT 
        GROUP_USERVIEW.ITU_ITU__ID 
      FROM 
       LOCAL_CONSUMER_TABLE.dbo.LoginInfoFinal AS LOCAL_CONSUMER_TABLE 
       INNER JOIN ORACLE_LINKED_SERVER..CONSUMER_TABLE.ITG_USER AS GROUP_USERVIEW 
         ON UPPER(LOCAL_CONSUMER_TABLE.personId) = UPPER(GROUP_USERVIEW.ITU_personId) 
     ) 
      AND GROUP_USER_ACCOUNT.UAC_DATE_REVOKED IS NULL 
     GROUP BY 
       GROUP_USER_ACCOUNT.UAC_ITU__ID 
     HAVING COUNT(GROUP_USER_ACCOUNT.UAC_ITU__ID) > 1 
    ) AS USER_ACCOUNT 
    INNER JOIN ORACLE_LINKED_SERVER..CONSUMER_TABLE.ITG_USER AS GROUP_USERVIEW 
     ON USER_ACCOUNT.UAC_ITU__ID = GROUP_USERVIEW.ITU_ITU__ID 
    INNER JOIN LOCAL_CONSUMER_TABLE.dbo.LoginInfoFinal AS LOCAL_CONSUMER_TABLE 
     ON UPPER(LOCAL_CONSUMER_TABLE.personId) = UPPER(GROUP_USERVIEW.ITU_personId) 
    INNER JOIN FACILITY.Personnel.Persons AS Persons 
     ON UPPER(LOCAL_CONSUMER_TABLE.personId) = UPPER(Persons.personId); 
+1

例外を発生させる*クエリ*を表​​示できますか? –

+0

CommandTimeoutの設定はどこですか? [これは同じ問題ですか?](https://stackoverflow.com/questions/6232633/entity-framework-timeouts) – musefan

+0

クエリを追加するように編集しました。また、タイムアウトは上記の「使用」の直後に設定されます。 –

答えて

0

Chrisが述べたように、接続タイムアウトでした。

関連する問題