If you'll forgive me for offering (in case you're creating dynamic SQL
within your app that you can't anticipate, say, though that's usually a
hefty security hole if it's anything other than a SELECT), you could
always try a stored procedure.
I'd wondered for a while why so many ADO.NET examples used sprocs, but
when you're pulling from more than one table like you do in pretty much
any real world situation, it's just so much easier to take the jump.
Makes your .NET code easier to maintain, and it's The Right Way to do
things.