我构建了一个Visual Studio扩展,它将一个菜单项添加到“Tables”节点的上下文菜单和Server Explorers数据连接部分中的每个子节点。
我已连接菜单项,因此BeforeQueryStatus事件在菜单出现之前触发,因此我可以动态控制菜单项的状态,启用/禁用它或选择菜单项是否应该出现。
在BeforeQueryStatus事件和调用处理程序中,我需要访问有关所选节点所代表的对象的信息。我需要知道实际数据连接的Connection String属性,它在“Tables”父节点中表示。
如果所选节点是表节点(“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)]
答案 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;