2

SQL Server データベース プロジェクト用の VS2010 拡張機能 (マネージ VSPackage) を作成しようとしています。

私がやりたいことは、Transact SQL エディター ウィンドウから「クエリ実行」イベントをキャプチャすることです。

ここに画像の説明を入力

次に、SQL テキストをキャプチャし、実行前に変更します。IVsRunningDocTableEventsこれまでのコードは、ドキュメントが開かれたときに (インターフェイスを使用して) Transact SQL エディター ウィンドウに接続することを扱っています。

public int OnBeforeDocumentWindowShow(uint docCookie, int fFirstShow, IVsWindowFrame pFrame)
{
    try
    {
        var marshalingWindowFrame = pFrame as WindowFrame.MarshalingWindowFrame;
        if (marshalingWindowFrame != null)
        {
            var sqlScriptEditorControl =
                marshalingWindowFrame.ViewHelper as
                SqlScriptEditorControl;
            if (sqlScriptEditorControl != null)
            {
                if (!sqlScriptEditorControl.IsConnected)
                {
                    ReadConnectionInfoAndConnectEditor(sqlScriptEditorControl, docCookie);
                }
            }
        }
    }
    catch (Exception exception)
    {
        Debug.WriteLine(exception);
    }

    return VSConstants.S_OK;
}

private void ReadConnectionInfoAndConnectEditor(SqlScriptEditorControl sqlScriptEditorControl, uint docCookie)
{
    string documentName = GetDocumentMoniker(docCookie);

    var document = _dte.Documents.OfType<Document>().FirstOrDefault(x => x != null && x.FullName == documentName);
    if (document != null)
    {
        var p = document.ProjectItem.ContainingProject;
        var hierarchy = ProjectToHierarchy(p);

        var buildPropertyStorage = hierarchy as IVsBuildPropertyStorage;

        if (buildPropertyStorage != null)
        {
            string sandboxTargetConnectionString;
            buildPropertyStorage.GetPropertyValue("SandboxTargetConnectionString", "Debug", (uint)_PersistStorageType.PST_USER_FILE, out sandboxTargetConnectionString);

            string sandboxTargetDatabase;
            buildPropertyStorage.GetPropertyValue("SandboxTargetDatabase", "Debug", (uint)_PersistStorageType.PST_USER_FILE, out sandboxTargetDatabase);

            var connectionStringBuilder = new SqlConnectionStringBuilder
                {
                    ConnectionString = sandboxTargetConnectionString,
                    InitialCatalog = sandboxTargetDatabase,
                    ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
                };

            var uiConnectionInfo = new UIConnectionInfo
                {
                    ServerName = connectionStringBuilder.DataSource,
                    ServerType = Microsoft.SqlServer.Management.UI.ConnectionDlg.SqlServerType.ServerType
                };

            var sqlConnection = new SqlConnection
                {
                    ConnectionString = connectionStringBuilder.ConnectionString
                };
            sqlConnection.Open();

            sqlScriptEditorControl.SetConnection(uiConnectionInfo, sqlConnection);
        }
    }
}

この場合、「クエリ実行」イベントをサブスクライブするにはどうすればよいですか?

4

0 に答える 0