Source/NuGetGallery.Operations/Tasks/CheckDatabaseStatusTask.cs (45 lines of code) (raw):
using System;
using System.Data.SqlClient;
using AnglicanGeek.DbExecutor;
using NuGetGallery.Operations.Common;
namespace NuGetGallery.Operations
{
[Command("checkdatabase", "Checks the status of the database", AltName = "chkdb", MaxArgs = 0)]
public class CheckDatabaseStatusTask: DatabaseTask
{
[Option("Force a backup, even if there is one less than 24 hours old", AltName="db")]
public string BackupName { get; set; }
public int State { get; private set; }
public override void ValidateArguments()
{
base.ValidateArguments();
ArgCheck.Required(BackupName, "BackupName");
}
public override void ExecuteCommand()
{
var masterConnectionString = Util.GetMasterConnectionString(ConnectionString.ConnectionString);
using (SqlConnection connection = new SqlConnection(masterConnectionString))
{
connection.Open();
SqlCommand command = new SqlCommand("SELECT [state] FROM sys.databases WHERE [name] = @BackupName", connection);
command.Parameters.AddWithValue("BackupName", BackupName);
SqlDataReader reader = command.ExecuteReader();
int count = 0;
while (reader.Read())
{
State = int.Parse(reader.GetValue(0).ToString());
count++;
}
if (count < 1)
{
State = -1; // Not present.
}
if (count > 1)
{
throw new InvalidOperationException("Please provide a specific database name");
}
Log.Trace("'{0}' State: {1}", BackupName, State);
}
}
}
}