On Aug 20, 2012, at 3:28 PM, Philippe Grohrock <philippe.grohr...@gmail.com> 
wrote:
> Thanks for the reply already and I'm sorry, I should've added the lines of 
> code.
> 
>       static class GlobalVariables
>       {
>               public static MySqlConnection connection = new connection();
>       }
> 
> This way the whole program has access to it and can modify/query the DB when 
> needed (this is what I meant with global).

I believe that this is a Bad Idea™.

Firstly, this is counter to ~every MSDN example on using connections, which 
always scopes the Connection instance:

        // 
http://msdn.microsoft.com/en-us/library/ff647768.aspx#scalenetchapt12_topic9
        using (SqlConnection conn = new SqlConnection(connString))
        {
                conn.Open();
                // ...
        }

This implies that you should instead do:

        static class Database {

                internal static MySqlConnection CreateConnection ()
                {
                        return new connection ();
                }
        }

And narrowly scope your use:

        using (var c = Database.CreateConnection ()) {
                c.Open ();
                // ...
        }

Now, _why_ should you do this? Unfortunately I can't find anything to confirm 
or deny the following, but this is my recollection from using SQL many years 
ago...

The reason why is connection-related errors: if (when) you hit a network 
interruption, the DbConnection instance is unusable afterward, even if the 
network came back. (Though maybe I needed to .Close() and .Open() to repair the 
instance? I no longer remember.) I found that the easiest/sanest way to go was 
to just recreate the Connection instance when needed, and Dispose() of it as 
soon as possible (relying on lower-level connection pooling if possible).

 - Jon

_______________________________________________
Mono-list maillist  -  Mono-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to