In my opinion, working with DataAdapters and DataSets is more flexible and more accurate.
Anyway, I don't really know your way of doing, but with a proper connectionString it works fine for my needs. Here is an instance:
string conStr = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=UserPassword";
ds = new DataSet();
con = new SqlConnection(conStr);
rd = new ReportDocument();
string sql = "SELECT * FROM TABLE";
da = new SqlDataAdapter(sql, con);
throw new Exception("Internal error: " +ex.Message);
if(ds != null) ds.Dispose();
if(da != null) da.Dispose();
This way, it works fine for me. You may also prefer to use the TableLogOnInfo object.
Hope this helps.