Yes, you can open the connection just once. You could use a class or something to manage this, but that seems overkill to me for a simple scenario.
public Data Get(Request request)
{
using (var connection = new SqlConnection(connectionString))
{
try
{
connection.open();
var data = new Data();
data = GetData(connection);
data.AppleData = GetGrapeData(connection);
data.OrangeData = GetGrapeData(connection);
data.GrapeData = GetGrapeData(connection);
return data;
}
finally
{
connection.close()
}
}
}
And then in the methods that call the stored procedure:
private Date GetDate(SqlConnection connection)
{
using (var command = connection.CreateCommand())
{
return ExecuteSP();
}
}
You can put exception handling wherever you'd like, but if you aren't going to do anything with the exception, then you absolutely should not catch it.