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 管理工作室中。

上面两个代码是异步运行的?

你能帮帮我吗?是否有机会使用 sqlcmd.exe 实用程序释放池?

4

1 回答 1

0

您可以使用 ClearAllPools 方法释放由单个进程打开的所有池连接

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