2011-08-07 5 views
-2

스레드를 사용하려고하는데 스레드가있는 초보자입니다.다중 스레드 정보

내 코드가 이런 식으로되어 있습니다. 나는 형태의 데이터 집합을하고 난 데이터베이스와 크레타 어댑터와 형태의 데이터 세트 fiil 일부 tablequery을 얻고 싶은

Dataset mydataset=new DataSet(); 
private void Form_Load(object sender,eventargs e) 
{ 
    SqlConnection con=new SqlConnection("constring"); 
    SqlDataAdapter adap=new SqlDataAdapter("select * from Tables"); 
    DataTable dt=new DataTable(); 
    adap.Fill(dt); 

    foreach(DataRow dr in dt.Rows) 
    { 
     ThreadStarter mystarter=delegate{ CreateTable(dr); }; 
     Thread mythread=new Thread(); 
     mythread.Start(); 
    } 
} 

void CreateTable(DataRow dr) 
{ 
    SqlDataAdapter adap2=new SqlDataAdapter(dr["Query"].toString(),con); 
    ada2.Fiil(myDataSet); 
} 

첫번째 폐쇄에 이미 SqlDataReader 개체있다 "처럼 나는 오류가 .I이 코드를 사용할 때 " 어떻게해야합니까?

+2

"나는 다음과 같은 오류가 발생합니다."- 실제 오류를 알려주는 것이 너무 어렵지는 않습니까? – JosephH

+5

붙여 넣은 코드를 컴파일하는 방법조차도 궁금해서 일하고 있습니다. ThreadStarter는 ThreadStartDelegate이어야하며, 새 Thread()는 새 Thread (mystarter) 여야하고 Form_Loaded()에 선언 된 "con"변수를 사용하려고하며 다른 스레드에서 호출되는 다른 함수에서이 변수에 액세스하고 있습니다. –

답변

1

여기서는 무엇을하려고하는지 설명해야 할 것 같습니다. 그것은 당신이 테이블의 목록을 열고 모든 테이블의 모든 데이터를 병렬로로드하려하지만 같은 단일 객체에 모든 데이터를로드하려고하는 것처럼 보입니다 ... 그것은 많은 의미를 갖지 않습니다.

그게 무슨 가치가 있는지, 같은 데이터베이스 연결을 동시에 사용하려고하는 여러 데이터 어댑터를 만드는 중일 것입니다. 그렇게 할 수는 없습니다. 이 모든 데이터를 병렬로로드하고 싶다면 데이터베이스에 여러 연결을해야합니다.

1

SqlConnection 연결은 한 번에 하나의 명령 (및 하나의 판독기) 만 지원합니다. 여러 스레드가 동시에 액세스 할 수 없습니다. 따라서 각 스레드에 separae SqlConnection 인스턴스를 만들어야합니다.