2016-10-08 6 views
-6
FileInfo file = new FileInfo("C:\\LS\\SmartStats.sql"); 
string script = file.OpenText().ReadToEnd(); 
SqlConnection conn = new SqlConnection(sqlConnectionString); 
Server server = new Server(new ServerConnection(conn)); 
server.ConnectionContext.ExecuteNonQuery(script); 

私はこのコードをどこから削除したのかわかりませんが、単一のデータベースで機能しました。インスタンス上のデータベースのコレクション上で.sqlファイルを実行する

私はC#を初めて使用しています。

アプリの内部または外部から.sqlファイルを呼び出せます。私はちょうど.sqlファイルを文字列化することはできませんし、任意のインスタンス上のデータベースのコレクションを介してforeachを行う?

+0

は、あなたがSMOのAPIを使用する必要があります。 smo.server.aspx。このオブジェクトから、データベースのコレクションを取得できます。 –

+0

本当に役に立たない脳。私はcannedコードの例を読むことができます。私はC#のコーダーのアドバイスが必要です。 – mikewestatl

+0

これまで実際に何を試しましたか? –

答えて

0

私は、あなたが繰り返し処理する必要があるデータベースのリストを持っていると仮定し、その部分を把握できると仮定します。

これを行うと、この作業を行う秘訣はSQL USEです。これをスクリプトの先頭に動的に追加するだけで、すべてが正しく動作するはずです。例えば

 FileInfo file = new FileInfo("C:\\LS\\SmartStats.sql"); 
     string script = file.OpenText().ReadToEnd(); 
     SqlConnection conn = new SqlConnection(sqlConnectionString); 
     Server server = new Server(new ServerConnection(conn)); 

     var databaseNames = new List<String> {"database1", "database2"}; 
     foreach (var databaseName in databaseNames) 
     { 
      server.ConnectionContext.ExecuteNonQuery("USE " + databaseName + Environment.NewLine + "GO" + Environment.NewLine + script); 
     } 
+0

実際には、私はデータベースのリストを知りません...しかし、これは私が行っていた方向です。 – mikewestatl

+0

@mikewestatl、クエリ 'sys.databases'インスタンスデータベースのリストを取得します。システムデータベース(マスタ、モデル、tempdbとSSISDB、ディストリビューター)を除外するだけです。 –

+0

はい。それはすでにダンをやっている。ありがとう。私は一度それを得ると、そのリストを反復することができない。ありがとう、結構です。 – mikewestatl

1

//参照SMO

Microsoft.SqlServer.Management.Sdk.Sfc

Microsoft.SqlServer.ConnectionInfo

マイクロソフトの次assemplyies。 SqlServer.Smo

// Using Microsof t.SqlServer.Management.Common;

// Microsoft.SqlServer.Management.Smoを使用します。 https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management:あなたが動的にサーバ上のデータベースのリストを収集する必要がある場合は

public static void ExecuteScript(string fname, List<string> databases) 
    { 
     string script = File.ReadAllText(fname); 
     ServerConnection conn = new ServerConnection("server-name/instance", "user", "password"); 

     Server SMOServer = new Server(conn); 

     // foreach (Database db in SMOServer.Databases) //for all databases in server 
     foreach (var dbname in databases) 
     {    
      var db = SMOServer.Databases[dbname]; 
      var ds = db.ExecuteWithResults(script); //if you want query result as a Dataset 
      //db.ExecuteNonQuery(script); // if you run non return query result, e.g update/insert/delete 
     } 
     conn.Disconnect(); 
    } 
+0

ありがとう!!!!!! – mikewestatl

関連する問題