c# - MySQL - Multiple result sets -


i'm using .net connector connect mysql. in application there few threads using same connection, if mysqldatareader not closed yet , thread trying execute query gives error:

there open datareader associated connection must closed first.

will there ever support in mysql multiple result sets or it's called?

my database management class:

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;         (int = 0; < args.length; i++)         {             string param = "{" + + "}";             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>();             (int = 0; < 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();     } } 

an example of how use this:

databaseconnection conn = new databaseconnection(); conn.connect("localhost", "root", "", "foogle"); var rows = conn.query("select * `posts` `id` = {0}", postid); foreach (var row in rows) {    console.writeline(row["title"]); // writes post's title (example) } 

multiple result sets refers single query or query batch returning multiple row sets. results accessed through 1 , datareader connection.

what you're asking quite different. need ability performing multiple simultaneous queries of single connection. afaik .net not support that, not sql server or other driver.

sharing connection between multiple threads bad idea , totally unnecessary. .net use connection pool limit total number of connections it's safe new connection each (set of) queries want execute. limit scope of connection thread , problem go away.


Comments

Popular posts from this blog

c++ - How do I get a multi line tooltip in MFC -

asp.net - In javascript how to find the height and width -

c# - DataTable to EnumerableRowCollection -