当运行多个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实用程序来释放池?您可以使用ClearAllPools方法释放由单个进程打开的所有池连接
SqlConnection.ClearAllPools();