当运行多个SQL查询时,可以在c#控制台应用程序中使用sqlcmd实用程序清除连接池

本文关键字:应用程序 控制台 sqlcmd 连接 清除 实用程序 SQL 运行 查询 | 更新日期: 2023-09-27 18:15:02

我有一个控制台应用程序,它使用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实用程序来释放池?

当运行多个SQL查询时,可以在c#控制台应用程序中使用sqlcmd实用程序清除连接池

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

SqlConnection.ClearAllPools();