コード例 #1
0
        public override List <DatabaseOverviewInfo> GetDatabaseList(bool includeDetails, LinkedDatabaseInfo linkedInfo = null)
        {
            if (includeDetails)
            {
                try
                {
                    using (var cmd = Connection.CreateCommand())
                    {
                        cmd.CommandText = SqlServerLinkedServer.ReplaceLinkedServer(SqlServerDatabaseFactory.LoadEmbeddedResource("databasesizes.sql"), linkedInfo);
                        using (var reader = cmd.ExecuteReader())
                        {
                            var res = new List <DatabaseOverviewInfo>();
                            while (reader.Read())
                            {
                                var item = new DatabaseOverviewInfo();
                                item.Name          = reader["DatabaseName"].SafeToString();
                                item.RowSizeKB     = long.Parse(reader["RowSizeKB"].SafeToString());
                                item.LogSizeKB     = long.Parse(reader["LogSizeKB"].SafeToString());
                                item.Collation     = reader["Collation"].SafeToString();
                                item.RecoveryModel = reader["RecoveryModel"].SafeToString();
                                bool isSnapshot             = reader["SnapshotIsolation"].SafeToString() == "1";
                                bool isReadCommitedSnapshot = reader["IsReadCommitedSnapshot"].SafeToString()?.ToLower() == "true";

                                if (isSnapshot)
                                {
                                    if (isReadCommitedSnapshot)
                                    {
                                        item.Concurrency = "High";
                                    }
                                    else
                                    {
                                        item.Concurrency = "Middle";
                                    }
                                }
                                else
                                {
                                    item.Concurrency = "Low";
                                }

                                res.Add(item);
                            }
                            return(res);
                        }
                    }
                }
                catch (Exception err)
                {
                    // use variant without details
                    ServiceProvider.LogError <SqlServerInterface>(err, "Error fetching database details");
                }
            }

            using (var cmd = Connection.CreateCommand())
            {
                cmd.CommandText = SqlServerLinkedServer.ReplaceLinkedServer("SELECT name FROM [SERVER].sys.databases order by name", linkedInfo);
                using (var reader = cmd.ExecuteReader())
                {
                    var res = new List <DatabaseOverviewInfo>();
                    while (reader.Read())
                    {
                        var item = new DatabaseOverviewInfo();
                        item.Name = reader["name"].SafeToString();
                        res.Add(item);
                    }
                    return(res);
                }
            }
        }
コード例 #2
0
 public SqlServerDialect(SqlServerDatabaseFactory factory)
     : base(factory)
 {
 }
コード例 #3
0
        protected override void DoGetModifications()
        {
            var existingObjects = new HashSet <string>();

            using (var cmd = Connection.CreateCommand())
            {
                cmd.CommandText = SqlServerLinkedServer.ReplaceLinkedServer(SqlServerDatabaseFactory.LoadEmbeddedResource("modifications.sql"), LinkedServerName, DatabaseName);
                using (var reader = cmd.ExecuteReader())
                {
                    int modifyIndex = reader.GetOrdinal("modify_date");

                    while (reader.Read())
                    {
                        string   id     = reader.SafeString("object_id");
                        DateTime modify = reader.GetDateTime(modifyIndex);
                        string   stype  = reader.SafeString("type");
                        string   name   = reader.SafeString("name");
                        string   schema = reader.SafeString("schema");

                        existingObjects.Add(id);

                        DatabaseObjectType type;
                        switch (stype.Trim())
                        {
                        case "U":
                            type = DatabaseObjectType.Table;
                            break;

                        case "V":
                            type = DatabaseObjectType.View;
                            break;

                        case "P":
                            type = DatabaseObjectType.StoredProcedure;
                            break;

                        case "IF":
                        case "FN":
                        case "TF":
                            type = DatabaseObjectType.Function;
                            break;

                        case "TR":
                            type = DatabaseObjectType.Trigger;
                            break;

                        default:
                            continue;
                        }

                        var obj = Structure.FindObjectById(id);

                        if (obj == null)
                        {
                            var item = new DatabaseChangeItem
                            {
                                Action     = DatabaseChangeAction.Add,
                                ObjectId   = id,
                                ObjectType = type,
                                NewName    = new NameWithSchema(schema, name),
                            };
                            ChangeSet.Items.Add(item);
                        }
                        else
                        {
                            if (obj.ModifyDate == null || Math.Abs((obj.ModifyDate.Value - modify).TotalSeconds) >= 1)
                            {
                                var item = new DatabaseChangeItem
                                {
                                    Action     = DatabaseChangeAction.Change,
                                    ObjectId   = id,
                                    ObjectType = type,
                                    OldName    = ((NamedObjectInfo)obj).FullName,
                                    NewName    = new NameWithSchema(schema, name),
                                };
                                ChangeSet.Items.Add(item);
                            }
                        }
                    }
                }
            }
            AddDeletedObjectsById(Structure.Tables, existingObjects);
            AddDeletedObjectsById(Structure.Views, existingObjects);
            AddDeletedObjectsById(Structure.StoredProcedures, existingObjects);
            AddDeletedObjectsById(Structure.Functions, existingObjects);
        }