c#thread / query执行两次

时间:2016-11-22 15:59:15

标签: c# multithreading

我正在研究一些针对sql server分析服务执行MDX查询的代码。 MDX查询正在同一个线程上执行两次,我不明白为什么。查询应该只执行一次

以下是一些代码。任何人都可以帮忙。

      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; }       
     }

}

1 个答案:

答案 0 :(得分:0)

解决。代码没问题,这是两次连接查询的连接字符串中的一个问题