Как получить строки подключения из обозревателя сервера - PullRequest
2 голосов
/ 15 марта 2012

Я хотел бы написать расширение для Visual Studio, которое позволит мне сгенерировать модель для указанной таблицы.

Я использовал следующий код для добавления элемента MyCommand в контекстное меню таблицы в проводнике сервера.:

Commands2 commands = (Commands2)_applicationObject.Commands;
CommandBar menuBarCommandBar = ((CommandBars)_applicationObject.CommandBars)["Object Node"];

Command command = commands.AddNamedCommand2(_addInInstance, "MyCommand", "MyCommand", 
    "Executes the command for MyCommand", true, 59, ref contextGUIDS,
    (int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled,
    (int)vsCommandStyle.vsCommandStylePictAndText, vsCommandControlType.vsCommandControlTypeButton);
if ((command != null) && (menuBarCommandBar != null))
{
        command.AddControl(menuBarCommandBar, 1);
}

Для получения имени выбранного элемента таблицы:

string fileName = "Dafault.cs";
var serverExplorer = _applicationObject.ToolWindows.GetToolWindow("Server Explorer") as UIHierarchy;
if (serverExplorer != null)
{
    dynamic item = ((object[])serverExplorer.SelectedItems)[0];
    fileName = string.Format("{0}.cs", item.Name);
}

//...
// Generate model based on table from database 
//...

_applicationObject.ItemOperations.NewFile("General\\Text File", fileName, Constants.vsViewKindCode);

Как получить информацию о подключении к базе данных?

1 Ответ

0 голосов
/ 11 ноября 2012

Брэд Ларсон, почему мой вопрос был удален?

Нашел решение. Б это

public static IDbConnection GetConnection(DSRefNavigator navigator, out string type)
        {
            type = null;
            try
            {
                if (navigator != null)
                {
                    IVsDataConnectionsService dataConnectionsService =
                        (IVsDataConnectionsService) Package.GetGlobalService(typeof(IVsDataConnectionsService));
                    string itemName = navigator.GetConnectionName();</p>

<code>                if (itemName != null)
                {
                    int iConn; // = dataConnectionsService.GetConnectionIndex(itemName);
                    DataViewHierarchyAccessor dataViewHierarchy = null;

                    for(iConn = 0; iConn < dataConnectionsService.Count; iConn++)
                    {
                        DataViewHierarchyAccessor hierarchyAccessor =
                            new DataViewHierarchyAccessor((IVsUIHierarchy) dataConnectionsService.GetConnectionHierarchy(iConn));
                        try
                        {
                            if (hierarchyAccessor.Connection.DisplayConnectionString == itemName)
                            {
                                dataViewHierarchy = hierarchyAccessor;
                                break;
                            }
                        }
                        catch
                        {
                        }
                    }
                    if (dataViewHierarchy != null)
                    {
                        DataConnection connection = dataViewHierarchy.Connection;
                        if (connection != null && connection.ConnectionSupport.ProviderObject != null)
                        {
                            type = connection.ConnectionSupport.ProviderObject.GetType().FullName;
                            return (IDbConnection) connection.ConnectionSupport.ProviderObject;
                        }
                    }
                }
            }
        }
        catch
        {
        }

        return null;
    }
</code>

...