我必须找到一种方法在C#中执行此操作,如果可能的话......
我必须在我的文件夹列表(mysql表)上循环,对于我实例化的每个文件夹,我必须执行另一个查询,但是当我这样做时,它说:“已经有一个与此连接关联的打开的DataReader”而且我是已经在mysqlreader循环中。
请注意,我过度简化了代码只是为了向您展示,事实是我必须在mysqlreader循环中进行查询,并且看起来不可能,因为它们在同一个连接上?
MySqlConnection cnx = new MySqlConnection(connexionString);
cnx.Open();
MySqlCommand command= new MySqlCommand("SELECT * FROM folder WHERE folder_id = " + id, cnx);
MySqlDataReader reader= commande.ExecuteReader();
while (reader.Read())
{
this.folderList[this.folderList.Length] =
new CFolder(reader.GetInt32"folder_id"), cnx);
}
reader.Close();
cnx.Close();
答案 0 :(得分:1)
嗯,你可以先将所有数据放到localy,也许是一个数据表或其他一些集合,然后循环遍历那个让你在该循环中进行第二次sql调用。
但是,在循环中进行sql调用通常不是一个好的途径。无论如何,您是否可以在第一次通话中获得所有数据?
答案 1 :(得分:0)
这里有几个选项,要么可以正常工作:
创建新连接,并为第二个阅读器使用第二个连接。
迭代第一个数据阅读器的结果,将folder_id
值存储在一个集合中,然后关闭阅读器并打开一个新的。
答案 2 :(得分:0)
当您打开DataReader时,您无法将该连接用于任何其他事情。您必须先关闭打开的阅读器,或打开新连接。数据库连接是宝贵的资源,因此除非绝对必要,否则我不建议在循环中打开新连接。
我没有完全得到您发送的代码..除了datareader之外,该连接不用于任何其他内容。