2012-10-24 7 views
9

ユーザーがボタンをクリックすると、指定されたサーバーとデータベース接続を持つSQL Server Management Studioクエリエディタが開きます。私はこれと同じ機能を持つことができますが、既に実行しているSSMSのインスタンス(新しいプロセスを開始しない)を使用することができます。C#アプリケーションでSSMSの新しいデータベース接続とクエリウィンドウを開きますか?

これまでの私のコード:限り私の研究が行く

if (IsProcessOpen("Ssms") == false) 
     { 
      Process ssms = new Process(); 
      ssms.StartInfo.FileName = "C:\\Program Files (x86)\\Microsoft SQL Server\\110\\Tools\\Binn\\ManagementStudio\\Ssms.exe"; 
      ssms.StartInfo.Arguments = "-S " + StaticVariables.Getserver + " -d " + StaticVariables.Getdatabase; 
      ssms.Start(); 
     } 
     else 
     { 
      //In already running SSMS process, open connection to server and database with new query window. 
     } 

答えて

2

、既存のSSMS processsとの相互作用に利用可能なAPIはありません。 (http://stackoverflow.com/questions/2334435/how-do-i-programmatically-open-a-new-tab-in-an-open-instance-of-sql-management-s)

あなたSendKeysを含むハックを試みる可能性がありますが、これはSSMSウィンドウの現在の状態を知らないという欠点があります(アクティブなウィンドウが開いている場合など)

元の要件を共有できる場合は、いくつかのより良い選択肢で。

+0

私はそれについて考えましたが、これにはショートカットキーが必要です。ショートカットキーはユーザーやバージョンによって異なる可能性があるので、これはうまくいくとは思わない。要件は、C#アプリケーションが事前定義済みのSQLコードを実行することですが、カスタムSQLコードを実行する場合は、SSMS経由でサーバー/データベースに接続する必要があります。 – Fienix

+0

それは難しいですね。これがアプリケーションに収まるかどうかは不明です。なぜアプリケーションがクエリを取得して代理で実行するのを許可しないのですか?あなたはSSMSを最大限に使いたいと思っていますか? – tempidope

+0

私はSSMSが必要だと信じています。 1つの例は、推定された実行計画を表示する必要があるためです。 – Fienix

関連する問題