0

sqlcmd.exe ユーティリティを使用するコンソール アプリケーションがあります。

テーブル構造を変更する大きな SQL ファイルと、ストアド プロシージャを作成するいくつかの SQL があります。

最初にテーブルの変更を適用し、その後に手順を適用します。

私は(大きなSQLファイルを実行するために)のようなものを書きました

FileInfo file = new FileInfo( pathToBigSqlFile );

Process process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;

process.StartInfo.FileName = "sqlcmd.exe";
process.StartInfo.Arguments = string.Format( "-S {0} -d {1} -U {2} -P {3} -i \"{4}\"",
   server, dbname, user, password, file.FullName );

process.Start();

わかりました。次のステップは、ストアド プロシージャを作成する他の SQL ファイルを実行することです

 Process process = new Process();
 process.StartInfo.UseShellExecute = false;
 process.StartInfo.RedirectStandardOutput = true;
 process.StartInfo.RedirectStandardError = true;
 process.StartInfo.CreateNoWindow = true;

foreach ( FileInfo file in fi ) {
       filename = Path.GetFileName( file.FullName );

       Console.WriteLine( i + "/" + sum + " Executing file: " + filename );

       i++;

       process.StartInfo.FileName = "sqlcmd.exe";
       process.StartInfo.Arguments = string.Format( "-S {0} -d {1} -U {2} -P {3} -i \"{4}\"",
          server, dbname, username, password, file.FullName );

       process.Start();

       Console.WriteLine( "The file(s) has(have) been executed" );
    }
 }

問題は、一部のストアド プロシージャが実行されることです。これらのストアド プロシージャは、最初のコード (大きな SQL ファイル) を実行することによって以前に変更されたいくつかの列を参照するためです。

最初のコードを実行せずに最後のコードのみを実行すると、すべてのストアド プロシージャが SQL Management Studio に表示されます。

上記の 2 つのコードは非同期で実行されますか?

ここで私を助けてもらえますか? sqlcmd.exe ユーティリティを使用してプールを解放する機会はありますか?

4

1 に答える 1

0

ClearAllPools メソッドを使用して、個々のプロセスによって開かれたすべてのプールされた接続を解放できます。

SqlConnection.ClearAllPools();
于 2013-05-23T09:39:52.867 に答える