Привязка панели проводника объектов SQL Server с помощью SMO

Я пытаюсь создать панель проводника объектов SQL Server в wpf, используя SMO

(Microsoft.SqlServer.ConnectionInfo.dll, Microsoft.SqlServer.Management.Sdk.Sfc.dll, Microsoft.SqlServer.Smo)

как это:

  • Server 50.80.90.90
    • DB1
      • Tables
        • tbl1
        • стол2
        • стол3
      • Процедуры
      • Просмотры
      • Функции
    • DB2
    • DB3

Это моя попытка:

CS

using Microsoft.SqlServer.Management.Smo;

public partial class SQLPaneDemo : Window
{
        public SQLAssigner()
        {
            InitializeComponent();
            //Connect to local sql server instance
            Server srv = new Server();
            treeView1.ItemsSource = new List<Server> { srv };
        }
}

Xaml

<Window x:Class="SQLPaneDemo.SQLPaneDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mdl="clr-namespace:Microsoft.SqlServer.Management.Smo;assembly=Microsoft.SqlServer.Smo"
        Title="SQLPaneDemo" Height="300" Width="300">
    <DockPanel>
        <TreeView x:Name="treeView1"/>
    </DockPanel>
    <Window.Resources>
        <HierarchicalDataTemplate DataType = "{x:Type mdl:Server}" ItemsSource = "{Binding Databases}">
            <TextBlock Text="{Binding Name}"/>
        </HierarchicalDataTemplate> 
        <DataTemplate DataType="{x:Type mdl:Database}">
            <TreeViewItem x:Name="DBtvItem" Header="{Binding Name}">
                <TreeViewItem Header="Tables" ItemsSource="{Binding Tables}"></TreeViewItem>
                <TreeViewItem Header="Procedures" ItemsSource="{Binding StoredProcedures}"></TreeViewItem>
                <TreeViewItem Header="Views" ItemsSource="{Binding Views}"></TreeViewItem>
                <TreeViewItem Header="Triggers" ItemsSource="{Binding Triggers}"></TreeViewItem>
            </TreeViewItem>
        </DataTemplate>
        <DataTemplate DataType="{x:Type mdl:Table}">
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type mdl:StoredProcedure}">
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type mdl:Trigger}">
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type mdl:View}">
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
    </Window.Resources>
</Window>

Он выдает исключение при привязке объектов db, поскольку он может иметь значение IsAccessable, равное false, как я могу привязать элемент DBtvItem только тогда, когда Database.IsAccessable == true? есть ли у вас какие-либо идеи/проекты/контроли по этой теме? А это моя демонстрация https://drive.google.com/file/d/0ByBgbqcnNgX_Rk83QUU0T0R4Qnc/view?usp=sharing Заранее спасибо.


person Kasper Roma    schedule 31.07.2015    source источник
comment
Не хватает информации. Какой тип исключения был выбран. Является ли база данных вашим собственным пользовательским типом?   -  person Glen Thomas    schedule 31.07.2015
comment
@Glen Thomas SqlException: невозможно открыть базу данных ReportServerTempDB. Нет, это не мой собственный тип, это мой демонстрационный проект drive.google .com/file/d/0ByBgbqcnNgX_Rk83QUU0T0R4Qnc/   -  person Kasper Roma    schedule 01.08.2015


Ответы (1)


Ваш логин может не иметь доступа к этой БД. Это одна из двух баз данных, созданных по умолчанию при установке SSRS.

person JCP    schedule 23.03.2017