2009-06-19 18 views
2

私はSSMSアドインを作成しようとしています。私がしたいことの1つは、新しいクエリウィンドウを作成し、それをプログラム上で(SQLログインのコンテキストで)サーバーインスタンスに接続することです。私は新しいクエリスクリプトウィンドウを作成することはできますが、最初に手作業でオブジェクトエクスプローラなどに接続することなく、接続方法を見つけることができません。言い換えれば、そう新しいクエリスクリプトをSSMSアドインに接続する方法は?

、私は手動でSQLインスタンスにObect Explorerを接続してから、私のアドインその方法を実行する場合、私はこのコードを使用して接続することができますクエリウィンドウを作成します。

ServiceCache.ScriptFactory.CreateNewBlankScript(
    Editors.ScriptType.Sql, 
    ServiceCache.ScriptFactory.CurrentlyActiveWndConnectionInfo.UIConnectionInfo, 
    null); 

しかし、私は接続のためのCurrentlyActiveWndConnectionInfo.UIConnectionInfoに依存したくありません。私はプログラムでSQLログインユーザー名とパスワードを設定したいと思います。

誰にもアイデアはありますか?

EDIT:

私はSystem.Data.SqlClient.SqlConnectionのインスタンスに最後のパラメータを設定することで、接続されているクエリウィンドウを得ることができました。しかし、接続は、私がプログラム的に設定しようとしているものの代わりに、最後に接続されたログインのコンテキストを使用します。つまり、接続するユーザーは、[新規クエリー]ボタンをクリックしてオブジェクトエクスプローラーを接続していないときに表示される[接続]ダイアログボックスで選択したものです。

EDIT2:

私が書く(または書き込みを期待して)いANアドイン当社の生産サーバーに対して実行したときに自動的に我々の場合、追跡システムにSQL文と実行結果を送信します。私が持っていた1つの考えは、書き込み権限を取り除き、このアドインを介してログインを割り当てることでした。ユーザーが強制的に#ステートメントをキャンセルするように強制します。もう一つの考えは、ServiceCache.ScriptFactory.CurrentlyActiveWndConnectionInfo.UIConnectionInfoのサーバー名を調べて、実動サーバーのリストと比較することです。一致しても大文字小文字の区別がない場合は、クエリをキャンセルします。

+0

ダイアログに独自の接続を作成しようとしていますか? –

+0

はい、基本的に。ユーザーは、ログイン情報自体を入力することはありません。すでに動作している永続ストレージから取得されます。 – squillman

+0

一度に、SSMSのアドインを作成する方法がないと聞いていました。それは変わったのですか? –

答えて

1

接続ダイアログウィンドウにフックする方法がないと思われるため、これを行う方法が見つかりませんでした。

あなたは何をしていますか?

EDIT: 正常に理解したら、実行中のクエリを傍受して、本番サーバーと一致する場合は、それをキャンセルしてテキストと結果をdbに送信しますか? hmm ...これは可能ですが、背後では本当に大きな痛みですが、私はこのためにアドインを使用しません。アドインを無効にしたり、アンインストールしたりすることができます。 プロダクションサーバーで適切なセキュリティ設定を行うことで、これを実行することをお勧めします。

+0

おっと、それはドラッグです...あなたは実際に私が昨夜あなたのアドインサイトを見つけた後に私を助けてくれることを望んでいた人々の一人です!プロジェクトの要約を含めるように質問を編集しました。 – squillman

+0

あなたの編集に:かなり。私は依然として運用システム上でクエリを実行することを望んでいます。プロダクションサーバーに対して実行されたクエリと結果が、問題追跡ツールに送信されるようにしたいだけです。私は、アドインが無効になっていることを心配していない、それはちょうど我々の部のためになるだろう。その解決策は私がプログラマチックに誰かを記録することはできません代替の場合... – squillman

+0

私は申し訳ありませんが、私は本当にあなたがこれを行うための実行可能な方法が表示されません。 –

0

私はこれをまだ試していませんが、あなたがショットを与えたかどうかは分かりません。

Microsoft.SqlServer.Management.Smo.RegSvrEnum.UIConnectionInfo u = 
    new Microsoft.SqlServer.Management.Smo.RegSvrEnum.UIConnectionInfo(); 

独自の接続を許可する必要があります。しかし、私が言ったように、私はまだそれをテストしていない。 Microsoft.SqlServer.RegSvrEnum.dllへの参照が必要です。

動作するかどうか教えてください。

2

念のために誰がprogrammaticalyクエリウィンドウを作成して接続する方法を探している - SSMS 2012年の短い例を:

UIConnectionInfo u =new UIConnectionInfo(); 

u.ServerName = "TestPC\\ServerInstance"; 

u.ServerType = new Guid("8c91a03d-f9b4-46c0-a305-b5dcc79ff907"); 

u.AuthenticationType = 0;//Use AuthenticationType = 1 for SQL Server Authentication 

u.AdvancedOptions.Set("DATABASE", "AdventureWorks2012"); 

IScriptFactory scriptFactory = ServiceCache.ScriptFactory; 

if(scriptFactory != null) 
{ 
    scriptFactory.CreateNewBlankScript(ScriptType.Sql, u, null); 
} 

このコードスニペットは、指定されたサーバに接続し、新しいクエリウィンドウを開きます。 Windows認証付きのデータベースです。

関連する問題