2011-08-07 59 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的“ 我能做什么?

+2

“我收到了一个错误” - 确实告诉我们您遇到的实际错误不是太麻烦吗? – JosephH

+5

我想知道如何粘贴代码甚至编译甚至工作。 ThreadStarter应该是ThreadStartDelegate,新的Thread()应该是新的Thread(mystarter),并且您试图使用在Form_Loaded()中声明的“con”变量,并且您正在另一个线程中调用的另一个函数中访问它。 –

回答

1

我想你将需要解释你在这里做什么。它看起来像是打开一个表的列表,然后尝试从所有这些表中并行地加载所有的数据,但是都放入同一个单独的对象中......这没有什么意义。

对于什么是值得的,错误似乎是你正在创建多个数据适配器,将同时使用相同的数据库连接 - 你不能这样做。如果你真的想要并行加载所有这些数据,你需要建立到数据库的多个连接。

1

A SqlConnection连接一次只支持一个命令(和一个阅读器)。它不能被多个线程同时访问。所以你需要在每个线程中创建一个分隔符SqlConnection实例。