多线程的信息

本文关键字:信息 多线程 | 更新日期: 2023-09-27 18:04:57

我正在尝试使用线程,但我有一些问题(我是初学者在线程)

我的代码就像那样。我有一个form形式的数据集我想从DataBase中获取一些tablequery然后创建适配器并将数据集归档到form

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 for closed first"。我能做什么?

多线程的信息

我认为你需要解释一下你在这里要做什么。它看起来就像你打开了一个表列表,然后试图从所有这些表中加载所有数据,并行地,但都到同一个单一对象中…这说不通啊。

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

SqlConnection连接一次只支持一个命令(和一个读取器)。它不能被多个线程并发访问。因此,您需要在每个线程中创建一个单独的SqlConnection实例。