public void GetCachedSnapshot() { #region arrange var db = new DatabaseService(); #endregion #region act GetCachedSnapshot var snapshot = db.GetCachedSnapshot(); #endregion #region assert Assert.AreNotEqual(0, snapshot.Servers.Count); Assert.AreNotEqual(0, snapshot.Servers[0].Databases.Count); Assert.AreNotEqual(0, snapshot.Servers[0].Databases[0].Tables.Count); var allTables = snapshot.Servers.SelectMany(c => c.Databases).SelectMany(c => c.Tables).ToArray(); Assert.AreNotEqual(0, allTables.Count()); Assert.AreEqual(0, allTables.Where(c => c.Columns.Count == 0).Count()); Assert.AreNotEqual(0, snapshot.Servers[0].Databases[0].Views.Count); Assert.AreNotEqual(0, snapshot.Servers[0].Databases[0].Views[0].Columns.Count); if (string.IsNullOrEmpty(snapshot.Servers[0].Databases[0].Views[0].Text)) Assert.Fail("didn't return code"); Assert.AreNotEqual(0, snapshot.Servers[0].Databases[0].StoredProcedures.Count); Assert.AreNotEqual(0, snapshot.Servers[0].Databases[0].StoredProcedures[0].Columns.Count); var allStoredProcedures = snapshot.Servers.SelectMany(c => c.Databases).SelectMany(c => c.StoredProcedures).ToArray(); Assert.AreNotEqual(0, allStoredProcedures.Count()); Assert.AreEqual(0, allStoredProcedures.Where(c => string.IsNullOrEmpty(c.Text)).Count()); #endregion #region act GetChangesSince and LastUpdatedObject var differential = snapshot.GetChangesSince(DateTime.Now.AddDays(-1)); var lastUpdated = snapshot.LastUpdatedObject; #endregion #region act FillSnapshotWithLatestChanges db.FillSnapshotWithLatestChanges(snapshot, snapshot.LastUpdatedObject.Value.AddDays(-3)); #endregion #region GetCachedSnapshot that triggers FillSnapshotWithLatestChanges ApplicationKeeper.Remove("LastTimeCheckedForUpdates"); db.GetCachedSnapshot(); #endregion /// save it to file to check size and format new XmlSerializer(typeof(Snapshot)).Serialize(new FileStream("snapshot.txt", FileMode.Create), snapshot); }
public System.Data.DataSet ExecuteStoredProcedure(DAL.StoredProcedure StoredProcedure, out string error) { error = string.Empty; DataSet result = new DataSet(); var snapshot = new DatabaseService().GetCachedSnapshot(); var database = snapshot.Servers.SelectMany(c => c.Databases).SingleOrDefault(c => c.DatabaseServerId == StoredProcedure.DatabaseServerId); var server = snapshot.Servers.SingleOrDefault(c => c.Id == database.ServerId); using(var con = new SqlConnection(server.GetTreatedConnectionString())) using (var com = con.CreateCommand()) { com.CommandText = string.Format("[{0}].{1}", database.Name, StoredProcedure.SchemaAndName); com.CommandType = System.Data.CommandType.StoredProcedure; com.CommandTimeout = 20; foreach (var column in StoredProcedure.Columns) com.Parameters.Add(new SqlParameter(column.Name, column.GetSampleValue(false))); using (var adapter = new SqlDataAdapter(com)) { con.Open(); try { adapter.Fill(result); } catch (Exception ex) { error = ex.ToString(); } finally { con.Close(); } } } return result; }