I have my business-logic implemented in simple static classes with static methods. Each of these methods opens/closes SQL connection when called:
public static void AddSomething(string something)
using (SqlConnection connection = new SqlConnection("..."))
//pass the connection object into the method
public static void AddSomething(string something, SqlConnection connection)
bool openConn = (connection.State == ConnectionState.Open);
if (!openConn) connection.Open();
if (!openConn) connection.Close();
Stick to option a.
The connection pooling is your friend.