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);
}
}
}
この場合、「クエリ実行」イベントをサブスクライブするにはどうすればよいですか?