Можем ли мы запустить перестроение индекса или реорганизовать команды из C # winform? - PullRequest
0 голосов
/ 11 марта 2019

Я хочу знать, возможно ли запустить перестроение индекса MS SQL Server или реорганизовать операции из c # winform?

У меня есть скрипт, использующий перестройку и реорганизацию. Теперь я хочу запустить весь скрипт в базе данных сервера одним нажатием кнопки. Является ли это возможным? Или административные команды можно запускать только из SSMS?

1 Ответ

3 голосов
/ 11 марта 2019

Да, создайте объект SqlCommand и установите CommandText соответствующим образом.

Обратите внимание, что идентификаторы в T-SQL нельзя параметризировать, что означает, что вам, возможно, придется использовать динамический SQL (иначе говоря, он потенциально уязвим кАтаки SQL), поэтому будьте осторожны.

Например, чтобы перестроить индекс:

const String sql = @"
    ALTER INDEX PK_Employee_BusinessEntityID ON HumanResources.Employee REBUILD;
";

using( StringWriter log = new StringWriter() )
using( SqlConnection c = new SqlConnection( connectionString ) )
using( SqlCommand cmd = c.CreateCommand() )
{
    c.InfoMessage += ( s, e ) => log.WriteLine( e.Message );

    await c.OpenAsync().ConfigureAwait(false);

    cmd.CommandText = sql;

    await cmd.ExecuteNonQueryAsync().ConfigureAwait(false);

    MessageBox.Show( "Done!\r\n" + log.ToString() );
}
...