Можно ли очистить пул соединений с помощью утилиты sqlcmd в консольном приложении C# при выполнении нескольких SQL-запросов?
У меня есть консольное приложение, которое использует утилиту 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.
Два приведенных выше кода выполняются асинхронно?
Вы можете помочь мне здесь? Есть ли шанс освободить пулы с помощью утилиты sqlcmd.exe?
1 ответ
Вы можете освободить все пулы соединений, открытых отдельным процессом, используя метод ClearAllPools
SqlConnection.ClearAllPools();