In this article, I am going to explain how you can create and drop a database, using C#.
Creating database
This class is the control class, through which we are going to call the helper methods.
- class Program
- {
- private static ExecuteSql _executeMaster;
- private static string _connectionString = "Data Source=.;Integrated Security=SSPI;Initial Catalog=testme;Application Name=Manager.Test;Connection Timeout=300;
- User ID = sa;
- Password = password;
- ";
- private static string _masterDatabaseName = "master";
- static void Main(string[] args)
- {
- _executeMaster = new ExecuteSql(openConnectionToMaster);
- createDatabase("testme");
- Console.WriteLine("done");
- Console.ReadLine();
- }
- private static SqlConnection openConnectionToMaster()
- {
- var connectionStringBuilder = new SqlConnectionStringBuilder(_connectionString);
- connectionStringBuilder.InitialCatalog = _masterDatabaseName;
- var conn = new SqlConnection(connectionStringBuilder.ConnectionString);
- conn.Open();
- return conn;
- }
- private static void createDatabase(string databaseName)
- {
- //check if the DB exists or not
- if (!Exists(databaseName))
- {
- try
- {
- var script = File.ReadAllText("CreateDB.sql");
- script = ReplaceScriptTags(script, databaseName);
- _executeMaster.ExecuteTransactionlessNonQuery(script, 10800);
- } catch (Exception exception)
- {
- string msg = exception.StackTrace;
- }
- }
- }
- private static string ReplaceScriptTags(string script, string name)
- {
- script = script.Replace("$(DBNAME)", name);
- return script;
- }
- public static bool Exists(string databaseName)
- {
- return
- Convert.ToBoolean(_executeMaster.ExecuteScalar("SELECT database_id FROM sys.databases WHERE Name = @databaseName", parameters: new Dictionary & lt; string, object & gt; {
- {
- "@databaseName",
- databaseName
- }
- }));
- }
- public static void Drop(string databaseName)
- {
- _executeMaster.ExecuteTransactionlessNonQuery(string.Format("DROP DATABASE [{0}]", databaseName), 120);
- }
- public static void SetOnline(string databaseName)
- {
- _executeMaster.ExecuteTransactionlessNonQuery(string.Format("ALTER DATABASE [{0}] SET ONLINE", databaseName));
- }
- }
- public class ExecuteSql
- {
- private readonly Func & lt;
- SqlConnection & gt;
- _openConnection;
- public ExecuteSql(Func & lt; SqlConnection & gt; openConnection)
- {
- _openConnection = openConnection;
- }
- public void ExecuteCustom(Action & lt; SqlConnection & gt; action)
- {
- using(var connection = _openConnection())
- {
- action(connection);
- }
- }
- public int ExecuteScalar(string sql, int timeout = 30, IDictionary & lt; string, object & gt; parameters = null)
- {
- parameters = parameters ? ? new Dictionary & lt;
- string, object & gt;
- ();
- var result = 0;
- using(var connection = _openConnection())
- {
- using(var transaction = connection.BeginTransaction())
- {
- using(var command = connection.CreateCommand())
- {
- command.Transaction = transaction;
- foreach(var parameter in parameters)
- {
- command.Parameters.AddWithValue(parameter.Key, parameter.Value);
- }
- command.CommandTimeout = timeout;
- {
- command.CommandText = sql;
- command.CommandType = CommandType.Text;
- result = (int)(command.ExecuteScalar() ? ?
- default (int));
- }
- transaction.Commit();
- }
- }
- }
- return result;
- }
- public void ExecuteTransactionlessNonQuery(string sql, int timeout = 30)
- {
- using(var connection = _openConnection())
- {
- using(var command = connection.CreateCommand())
- {
- command.CommandType = CommandType.Text;
- command.CommandTimeout = timeout;
- command.CommandText = sql;
- command.ExecuteNonQuery();
- }
- }
- }
- public void ExecuteNonQuery(string sql, int timeout = 30, IDictionary & lt; string, object & gt; parameters = null)
- {
- parameters = parameters ? ? new Dictionary & lt;
- string, object & gt;
- ();
- using(var connection = _openConnection())
- {
- using(var transaction = connection.BeginTransaction())
- {
- using(var command = connection.CreateCommand())
- {
- command.Transaction = transaction;
- command.CommandTimeout = timeout;
- {
- command.Parameters.Clear();
- foreach(var parameter in parameters)
- {
- if (sql.Contains(parameter.Key))
- {
- command.Parameters.AddWithValue(parameter.Key, parameter.Value);
- }
- }
- command.CommandText = sql;
- command.CommandType = CommandType.Text;
- command.ExecuteNonQuery();
- }
- transaction.Commit();
- }
- }
- }
- }
- }

kalu singh raoPosted Jul 8, 2016, 1:30 AM
Nice...