• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 556
  • Last Modified:

how to use multiple instance of a db connection with multiple thread in C#.Net

I have a console application(C#). I want to use more than one instance of mysqlconnection.
I have  a master table with 50000 rows. I want to split the data in 10 set and want to run some procedures parallel with the data. please help me.
0
dynamicweb09
Asked:
dynamicweb09
  • 4
  • 2
  • 2
  • +1
3 Solutions
 
igordevelopCommented:
Hi,

Using multiple instances is usually something that developers want to avoid. In fact, you should use the same instance for multiple operations. Make the connection instance to be global so you can access it from any code-block and just play with its state (open it and close it after use each time).

Example, make this global, public:
SqlConnection conn = new SqlConnection("ConnectionString");

Then, every time you need to use this connection don't forget to open and close it, or if you use it for parallel execution do not close it after all queries are executed;

conn.Open();
//run queries
conn.Close();

Let me know if anything.

Regards,
Igor
0
 
dynamicweb09Author Commented:
Thanks Igor for your reply.

Actually I want to run same procedure with different parameter  parallel y. please help me
0
 
Jacques Bourgeois (James Burger)PresidentCommented:
You do not need multiple instances of the connection, you need multiple instances of the type of object in which you receive the data (collection, DataTable, DataGridView).

The same Connection object can be used with multiple Command objects, each of whom having different parameters, and they can all use the same Connection. However, by default, you need to run the commands one after the other. You cannot run multiple command at the same time.

SQL Server has a mode that enables multiple commands to run simultaneously on the same connection, but I cannot say if it is available for MySql. It is called Multiple Active Result Sets (MARS). You might want to search your MySql documentation to know if it is available.

I would also point out that I would not use a global variable as suggested by Igor. Global variables are a pain to debug. When you have a problem with one of those, you need to look all over the place in the application.

ADO.NET has been built in order to enable to use local variables for connections. Using those, if you have a problem, your search is limited to the method in which you have created the variable. This makes debugging and maintenance a lot easier.
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
dynamicweb09Author Commented:
Can I call Asynchronously? if yes then how?
0
 
Jacques Bourgeois (James Burger)PresidentCommented:
Once again, I speak of my experience with SQL Server, so I am not sure that MySql has those, but the Command object has a series of BeginExecute methods that runs asynchronously. Since all the ADO.NET libraries follow the same model, you might have those on your side.
0
 
käµfm³d 👽Commented:
@JamesBurger
SQL Server has a mode that enables multiple commands to run simultaneously on the same connection, but I cannot say if it is available for MySql. It is called Multiple Active Result Sets (MARS).
Please cite a reference that indicates MARS queries in parallel.

http://technet.microsoft.com/en-us/library/cc966385.aspx

It is probably as important to delimit what MARS is not:

Parallel execution: Though MARS enables more than one request to be submitted under the same connection, this does not imply that they will be executed in parallel inside the server. MARS will multiplex execution thread between outstanding requests in the connection, interleaving at well defined points.
0
 
Jacques Bourgeois (James Burger)PresidentCommented:
@kaufmed

As stated in your reference, MARS works through "Interleaved execution". It is my understanding and my experience that from the application point of view, you feel that the result is the same as if the stuff was working in real parallel execution. If you start a long asynchrone query, and follow it with a short asynchrone query, the second one will finish before the first.
0
 
käµfm³d 👽Commented:
I don't believe that is guaranteed, though. The reference states "at well-defined points." Do you know what those "well-defined points" are? Is it guaranteed that a short query will finish before a long query?
0
 
Jacques Bourgeois (James Burger)PresidentCommented:
Unfortunately, I am not in the secrets of the gods. And I never explecitely tested for that. All I can say by my experience is that you get the feeling that the queries are executing at the same time, and in my book, how the user feels is more important than what really happens.
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 4
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now