Friday, September 5, 2008

SMO Clean DB

string dbServerMachineName = dataSource;

Server server = new Server(dbServerMachineName);
Database db = server.Databases["sampleDBName"];

StringCollection tables = new StringCollection();
// Clean log data
tables.Add("SampleTable");


// Drops FK's
int dropCount = 0;
StringCollection script = new StringCollection();
for ( int i = 0; i < tables.Count; i++ )
{
try
{
if ( i == 43 )
{
string x = null;
}
Table table = db.Tables[tables[i], "Sample"];
for ( int j = 0; j < table.ForeignKeys.Count; j++ )
{
string[] fkScript = new string[table.ForeignKeys[j].Script().Count];
table.ForeignKeys[j].Script().CopyTo(fkScript, 0);
script.AddRange(fkScript);
table.ForeignKeys[j].MarkForDrop(true);
dropCount++;
}
table.Alter();
}
catch ( Exception ex )
{
throw ex;
}
}

// Truncate data
SqlServerController sqlServerController = new SqlServerController(dbServerMachineName);
for ( int i = 0; i < tables.Count; i++ )
{
sqlServerController.CleanTable(dbPrefix + studioCode + dbSuffix, tables[i], "Sample");
}

// Recreate FK's
for ( int i = 0; i < script.Count; i++ )
{
script[i] = script[i].Replace("REFERENCES", "REFERENCES[Sample].");
}
db.ExecuteNonQuery(script);

// Delete asset delivery files
if ( options.DeleteAssetFiles )
{
DirectoryInfo masterAssetDir = new DirectoryInfo(masterAssetUnc + @"\" + studioCode);
masterAssetDir.Delete(true);
masterAssetDir.Create();
}

// Rebuild Indexes
for ( int i = 0; i < tables.Count; i++ )
{
db.Tables[i].RebuildIndexes(0);
}

// Shring DB
db.Shrink(0, ShrinkMethod.Default);

No comments: