我有一个正在处理的c#应用程序,并希望运行查询,然后在ExecuteReader的输出内运行另一个查询。我的问题是,这可以在单个连接内完成,还是每次我想运行新的查询时都必须关闭并重新打开连接?查询在单个MySQL连接中使用C#的另一个查询返回
回答
您可以使用相同的连接在另一个之后运行一个查询。但是,DataReader使用连接来读取结果,因此必须先读取结果并关闭阅读器,然后才能运行下一个查询。
如果您需要对结果中的每一行运行另一个查询,则首先需要将结果读入集合,以便在循环结果之前关闭阅读器。或者,您可以打开另一个连接,但如果可能的话,最好坚持一个连接。
还要考虑是否可以使用连接在单个查询中得到结果。运行单个查询比数百个更好。
您可以重新使用连接。您可能需要更改CommandType,但不需要关闭并重新打开连接。这增加不必要的开销。
CommandType不一定是查询的文本吗? MySqlCommand qry = new MySqlCommand(“SELECT somthing FROM table1”); qry.CommandType = System.Data.CommandType.Text; qry.Connection = conn; MySqlDataReader res = qry.ExecuteReader(); – aHunter 2009-09-21 14:51:33
如果您以这种方式运行查询,那么它会保持文本。 – 2009-09-21 14:53:22
你可以用一个连接来完成。
您不需要打开然后关闭,在这种情况下,首选方法是保持连接打开。
您不必关闭它。
using(connection...)
{
query1;
query2;
}
谢谢你是这个意思吗? (MySqlConnection conn = new MySqlConnection(global.connectionString)){MySqlCommand qry1 = new MySqlCommand(“SELECT something FROM table1”); MySqlDataReader res_qry1 = qry1.ExecuteReader(); while(res_qry1.Read()){MySqlCommand qry2 = new MySqlCommand(“SELECT something FROM table2”); MySqlDataReader res_qry2 = qry2.ExecuteReader(); } – aHunter 2009-09-21 14:47:19
只要您在完成之后关闭阅读器,在运行下一个查询之前,就像Guffa指出的那样。 – 2009-09-21 14:54:48
是的,类似的东西。 – 2009-09-21 15:06:43
你也可以考虑使用DataTableReader,它是一个非连接的阅读器,你可以遍历它的结果,而不必在内存中存储需要两次迭代的另一个集合。
- 1. MySQL查询使用另一个查询
- 2. 另一个查询中的MySQL查询
- 3. MySQL查询仅返回一个单列
- 4. 做查询的另一个查询,如果另一个查询不存在返回0和2的查询
- 5. Mysql中的一个查询(内连接?)
- 6. MySQL - 在另一个UNION查询中使用查询结果
- 7. 使用从一个MySQL查询插入到另一个查询
- 8. 在另一个查询中使用一个查询的结果
- 9. 返回列valuses在一个MySQL查询
- 10. mysql查询另一个连接表结果的连接表
- 11. MySQL查询在查询连接表时返回没有结果
- 12. 在另一个查询中使用一个查询的结果(MySQL)
- 13. 如何在另一个查询(PHP/MySQL)中使用一个查询的结果
- 14. MySQL在另一个查询中使用一个查询的结果
- 15. 连接2个MySQL查询
- 16. 使用子查询返回多个行的mysql查询
- 17. 在另一个查询中使用一个查询值Neo4j CQL
- 18. php mySQL返回一个空的查询
- 19. MYSQL连接查询返回空结果
- 20. MySQL:查询另一个查询结果并返回两个结果?
- 21. 在另一个查询中使用内部连接的结果
- 22. 如何制作使用另一个查询结果的单个MySQL查询
- 23. 使用另一个查询的数组结果的mysql查询
- 24. 使用mysql在单个查询中执行多个查询
- 25. 在MySQL中连接两个group_concat查询
- 26. 在另一个查询中查询?
- 27. 使用连接mysql查询
- 28. MySQL查询返回一个负行数
- 29. MySQL查询只返回一个结果
- 30. 从另一个mysql查询中选择的mysql查询
很好的答案。我没有提到关闭读者。 – 2009-09-21 14:52:30
我不得不说,这正是我认为DataReader只能用于该连接的一次。因此,您必须让DataReader输出结果,然后才能打开和关闭连接。如果你有一个DataReader和ExecuteNonQuery,这是否一样? – aHunter 2009-09-21 14:56:25
@Stuart:您无论如何都只能使用一个DataReader,但不需要为每个DataReader打开一个新连接。如果你有一个开放的DataReader,它需要连接来读取它的结果,所以即使对于ExecuteNonQuery也不能使用连接。 – Guffa 2009-09-21 15:09:35