Visual Studio扩展,获取有关服务器资源管理器中节点的信息

时间:2017-08-30 15:49:34

标签: visual-studio visual-studio-2017 visual-studio-extensions

我构建了一个Visual Studio扩展,它将一个菜单项添加到“Tables”节点的上下文菜单和Server Explorers数据连接部分中的每个子节点。

enter image description here

我已连接菜单项,因此BeforeQueryStatus事件在菜单出现之前触发,因此我可以动态控制菜单项的状态,启用/禁用它或选择菜单项是否应该出现。

在BeforeQueryStatus事件和调用处理程序中,我需要访问有关所选节点所代表的对象的信息。我需要知道实际数据连接的Connection String属性,它在“Tables”父节点中表示。

Data connection properties

如果所选节点是表节点(“Tables”的子节点),我还需要知道节点所代表的表名和模式。

我试过看各种物体,似乎无法找到我追求的东西。任何帮助赞赏。这是我的出发点:

  mydata =[(22, 1),
            (22, 0),
            (22, 0),
            (22, 1),
            (23, 0),
            (23, 1),
            (23, 2),
            (23, 1),
            (23, 0),
            (24, 3),
            (24, 3),
            (24, 2),
            (24, 1),
            (24, 0)]

1 个答案:

答案 0 :(得分:1)

您可以通过IVsDataExplorerConnectionManager获取所有连接,以及以下代码供您参考。

IVsDataExplorerConnectionManager connectionManager = this.ServiceProvider.GetService(typeof(IVsDataExplorerConnectionManager)) as IVsDataExplorerConnectionManager;
            IDictionary<string, IVsDataExplorerConnection> connections = connectionManager.Connections;
            foreach (KeyValuePair<string, IVsDataExplorerConnection> connection in connections)
            {

                if(connection.Key == "youconnectionkey")
                { 
                    string connstr = connection.Value.Connection.DisplayConnectionString;
                    string NodeText = connection.Value.DisplayName;
                using (SqlConnection conn = new SqlConnection(connstr))
                {
                    conn.Open();
                    DataTable schema = conn.GetSchema("Tables");
                    List<string> TableNames = new List<string>();
                    foreach (DataRow row in schema.Rows)
                    {
                        TableNames.Add(row[2].ToString());
                    }
                }


                }
            }

另外,请添加以下参考。

using Microsoft.VisualStudio.Data.Services;