2016-11-22 20 views
0

SQL Server分析サービスに対してMDXクエリを実行するコードを作成しています。同じスレッドでMDXクエリが2回実行されていますが、理由はわかりません。クエリは1回だけ実行する必要があります2回実行するC#スレッド/クエリ

以下はコードの一部です。誰でも助けてください。

 private void Start_QueryWorkers() 
    {    
      foreach (QueryThread th in _QueryWorkers) 
      { 
      SSASQuery q = new SSASQuery();      
      q.QueryText = "SELECT NON EMPTY { [Measures].[count] } ON COLUMNS FROM [cube]";         
      q.queryThread = th;    
      th.WorkerThread.RunWorkerAsync(q); 
     }   
    } 

    private void QueryWorkerThread_DoWork(object sender, DoWorkEventArgs e) 
    { 
     SSASQuery q = e.Argument as SSASQuery;  
     OleDbCommand cmd = new OleDbCommand(q.QueryText, q.queryThread.conn); 
     OleDbDataReader rdr = cmd.ExecuteReader();    
      rdr.Close();   
    } 

     private void btnStartTest_Click(object sender, EventArgs e) 
    {  
      string strConnString = "Provider=MSOLAP;Data Source=SRV001" + ";Initial Catalog=Cube_2015" + ";"; 
     _QueryWorkers.Clear(); 
     {     
      QueryThread thread = new QueryThread(strConnString);   
      thread.WorkerThread = new BackgroundWorker(); 
       thread.WorkerThread.DoWork += new DoWorkEventHandler(this.QueryWorkerThread_DoWork);         
       _QueryWorkers.Add(thread);  
     }        
      Start_QueryWorkers();    
    }    
} 

class SSASQuery 
{ 
    public string QueryText { get; set; }  
    public QueryThread queryThread { get; set; }   
} 

class QueryThread 
{ 
    public QueryThread(string connString) 
    { 
     this.connString = connString; 
     conn = new OleDbConnection(connString); 
     conn.Open();   
     queryList = new SortedList(); 
    } 
    public SortedList queryList { get; set; } 
    public string threadName { get; set; } 
    public string connString { get; set; } 
    public OleDbConnection conn;  
    public BackgroundWorker WorkerThread { get; set; }  
    } 

}解決

+0

BackgroundWorkerはスレッドではありません。スレッド上では古くなった抽象化です。まるでそれがスレッドであるかのように使用しようとすると、何も得られません。 PLINQ、Parallel.ForEach、またはActionBlock を使用すると、各クエリを並列に実行し、結果を格納するのが簡単になります。 –

+0

こんにちは、ありがとうございます。とにかくDoWork/BackgroundWorkerが上記のコードで2回実行されている理由を助けることができます – DC07

+0

なぜnumThreads = 1の場合に 'for(int i = 0; i McNets

答えて

0

。コードは正常でした。クエリを2回実行している接続文字列に問題がありました。

関連する問題