C# MySQL-多结果集
我正在使用.NET连接器连接到MySQL。 在我的应用程序中,很少有线程使用相同的连接,因此,如果MySQLDataReader尚未关闭,而某些线程正在尝试执行查询,则会出现以下错误: 已存在与此连接关联的打开的DataReader,必须先关闭该连接 MySQL中会支持多个结果集吗?或者不管它叫什么 我的数据库管理类:C# MySQL-多结果集,c#,.net,mysql,C#,.net,Mysql,我正在使用.NET连接器连接到MySQL。 在我的应用程序中,很少有线程使用相同的连接,因此,如果MySQLDataReader尚未关闭,而某些线程正在尝试执行查询,则会出现以下错误: 已存在与此连接关联的打开的DataReader,必须先关闭该连接 MySQL中会支持多个结果集吗?或者不管它叫什么 我的数据库管理类: public class DatabaseConnection { private MySqlConnection conn; public void Conn
public class DatabaseConnection
{
private MySqlConnection conn;
public void Connect(string server, string user, string password, string database, int port = 3306)
{
string connStr = String.Format("server={0};user={1};database={2};port={3};password={4};charset=utf8",
server, user, database, port, password);
conn = new MySqlConnection(connStr);
conn.Open();
}
private MySqlCommand PrepareQuery(string query, object[] args)
{
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
for (int i = 0; i < args.Length; i++)
{
string param = "{" + i + "}";
string paramName = "@DBVar_" + i;
query = query.Replace(param, paramName);
cmd.Parameters.AddWithValue(paramName, args[i]);
}
cmd.CommandText = query;
return cmd;
}
public List<Dictionary<string, object>> Query(string query, params object[] args)
{
MySqlCommand cmd = PrepareQuery(query, args);
MySqlDataReader reader = cmd.ExecuteReader();
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
while (reader.Read())
{
Dictionary<string, object> row = new Dictionary<string, object>();
for (int i = 0; i < reader.FieldCount; i++)
{
row.Add(reader.GetName(i), reader.GetValue(i));
}
rows.Add(row);
}
reader.Close();
return rows;
}
public object ScalarQuery(string query, params object[] args)
{
MySqlCommand cmd = PrepareQuery(query, args);
return cmd.ExecuteScalar();
}
public void Execute(string query, params object[] args)
{
MySqlCommand cmd = PrepareQuery(query, args);
cmd.ExecuteNonQuery();
}
public void Close()
{
conn.Close();
}
}
多个结果集是指返回多个行集的单个查询或查询批处理。这些结果通过该连接的唯一数据读取器访问
你要求的是完全不同的东西。您需要能够对单个连接同时执行多个查询。Afaik.NET不支持这一点,SQL Server或任何其他驱动程序都不支持
在多个线程之间共享连接是个坏主意,完全没有必要。NET将使用一个连接池来限制连接的总数,因此为每个(一组)要执行的查询获取一个新连接是完全安全的。将连接范围限制在线程上,问题就会消失。我不会说这是由于MySQL造成的。看起来更像是MySQLDataReader控件的限制。如果MySQL支持此功能,我可以在他们的网站上找到此功能..:\你能发布你的代码吗?它非常大,并且分成了很多文件,但是我会发布我的数据库管理类(我正在编辑这篇文章)。
DatabaseConnection Conn = new DatabaseConnection();
Conn.Connect("localhost", "root", "", "foogle");
var rows = conn.Query("SELECT * FROM `posts` WHERE `id` = {0}", postID);
foreach (var row in rows)
{
Console.WriteLine(row["title"]); // Writes the post's title (example)
}