2013-05-23 3 views
0

У меня есть консольное приложение, которое использует утилиту sqlcmd.exe.Можно очистить пул соединений с помощью утилиты sqlcmd в консольном приложении C# при запуске нескольких SQL-запросов?

У меня есть большой файл 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"); 
    } 
} 

Проблема заключается в том, что некоторая хранимых процедур является e xecuted. Поскольку эти хранимые процедуры относятся к некоторым столбцам, которые были изменены ранее, выполнив первый код (большой файл sql).

Если я запускаю только последний код без первого запуска, то все работы и все хранимые процедуры отображаются в студии управления SQL.

Вышеуказанный код выполняется асинхронно?

Вы можете мне помочь? Есть ли возможность выпускать пулы с помощью утилиты sqlcmd.exe?

ответ

0

Вы можете освободить все объединенные соединения, открытых с помощью отдельного процесса с использованием метода ClearAllPools

SqlConnection.ClearAllPools(); 
+0

Я не использовал SqlConnection или что-нибудь связанный с подключением к базе данных ссылок. Только утилита sqlcmd.exe. –

+0

Есть ли какая-то особая причина, почему вам нужно использовать утилиту sqlcmd.exe или вы не можете просто проанализировать файл обновления и запустить с помощью sqlconnection? – Johnv2020