public IEnumerable <DatabaseDbo> EnumerateDatabases(EnumerateDatabasesRequest request)
 {
     try
     {
         var options = new TransactionOptions()
         {
             IsolationLevel = System.Transactions.IsolationLevel.Serializable,
             Timeout        = new TimeSpan(0, TransactionTimeout, 0)
         };
         using (var trScope = new TransactionScope(TransactionScopeOption.Required, options))
         {
             UsrNamePassword credentials;
             if (String.IsNullOrEmpty(request.LoginName) || String.IsNullOrEmpty(request.Password))
             {
                 credentials          = new UsrNamePassword(); // Take credentials from the session
                 credentials.UserName = UserName;
                 credentials.Password = Password;
             }
             else
             {
                 credentials = new UsrNamePassword(request.LoginName, request.Password);
             }
             IEnumerable <DatabaseDbo> rzlt = EnumerateDatabases(request.ServerName, credentials.UserName, credentials.Password,
                                                                 request.NamePattern, request.AccessibleOnly);
             trScope.Complete();
             return(rzlt);
         }
     }
     catch (Exception ex)
     {
         string msg = ex.Message;
         return(new List <DatabaseDbo>());
     }
 }
        public CreateDbConnectionResponse CreateDbConnection(CreateDbConnectionRequest request)
        {
            var  credentials = new UsrNamePassword(request.LoginName, request.Password);
            bool loginIsOk;

            string message = BuildSqlConnection(request.ServerName, request.InitialCatalog, credentials.UserName, credentials.Password,
                                                out loginIsOk);

            if (!loginIsOk)
            {
                return new CreateDbConnectionResponse()
                       {
                           Connected = false, ErrorMessage = message
                       }
            }
            ;
            else
            {
                var rzlt = new CreateDbConnectionResponse()
                {
                    Connected       = true,
                    CurrentServer   = request.ServerName,
                    CurrentDatabase = request.InitialCatalog,
                };

                try
                {
                    var options = new TransactionOptions()
                    {
                        IsolationLevel = System.Transactions.IsolationLevel.Serializable,
                        Timeout        = new TimeSpan(0, TransactionTimeout, 0)
                    };
                    using (var trScope = new TransactionScope(TransactionScopeOption.Required, options))
                    {
                        rzlt.Roles = GetUsersRoles(credentials.UserName);
                        trScope.Complete();
                        return(rzlt);
                    }
                }
                catch (Exception ex)
                {
                    return(new CreateDbConnectionResponse()
                    {
                        Connected = false, ErrorMessage = ex.Message
                    });
                }
            }
        }