Можно ли очистить пул соединений с помощью утилиты sqlcmd в консольном приложении С# при выполнении нескольких запросов 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.

Приведенные выше два кода выполняются асинхронно?

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


person Snake Eyes    schedule 23.05.2013    source источник


Ответы (1)


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

SqlConnection.ClearAllPools();
person Johnv2020    schedule 23.05.2013
comment
Я не использовал SqlConnection или что-либо, связанное с подключением к ссылкам на базу данных. Только утилита sqlcmd.exe. - person Snake Eyes; 23.05.2013
comment
Есть ли особая причина, по которой вам нужно использовать утилиту sqlcmd.exe, или вы просто не можете анализировать файл обновления и запускать его с помощью sqlconnection? - person Johnv2020; 23.05.2013