d_train2014 Ответов: 1

Можно ли вернуть сообщения в стиле SSMS в приложении C# winforms?


Всем Привет

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

Я попробовал событие ".InfoMessage" и не получаю ответных сообщений, я попробовал ".StatementCompleted", и это прекрасно работает, если сказать, что я обновляю запись. но я хочу ввести команду (или серию команд), например
ALTER TABLE [dbo].[Batch] ADD [totalLoose] int
и получить обратно Сообщение, Как я бы сделал в SSMS, либо оно завершилось успешно, либо потерпело неудачу.

Возможно ли это, поскольку я потратил так много времени на поиски и попытки нескольких вещей, и все они до сих пор не оправдали ожиданий?

спасибо заранее.

DT

Что я уже пробовал:

using (conn = new SqlConnection(ConnectionString))
{

    conn.FireInfoMessageEventOnUserErrors = true;
    conn.InfoMessage += OnInfoMessage;
    conn.Open();
    using (sc = new SqlCommand(sql, conn))
    {
        sc.StatementCompleted += OnStatementCompleted;
        sc.ExecuteNonQuery();
    }
    conn.Close();
    conn.InfoMessage -= OnInfoMessage;
    conn.FireInfoMessageEventOnUserErrors = false;
}


private void OnStatementCompleted(object sender, StatementCompletedEventArgs e)
{
    ResultTBC.Text += "\n" + "("+e.RecordCount + " row(s) affected)";
}

private void OnInfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    ResultTBC.Text += "\n" + e.Message;
}

1 Ответов

Рейтинг:
2

Garth J Lancaster

Интересная головоломка .. кстати это Использование события InfoMessage объекта SqlConnection [^] может дать вам больше информации о событии InfoMessage

Хорошо, учитывая, что мы знаем, что у клиентской стороны есть ограничения, умолять их о здравомыслии, скорее всего, пустая трата времени - так что вот вам мысль ..

1) напишите интерфейс, который запускает InformationEvent - вы можете определить, какую информацию он должен нести - на самом деле, это может быть "объединяющее" событие, но оно обертывает выполнение SQL
2) Используйте это для создания классов для обработки различных команд, для которых вы, возможно, захотите запустить события - вам может понадобиться только две реализации, одна для инструкций SQL Update/Insert data, одна для операторов типа " ALTER...".. но программа будет получать один тип события, свои сведения .. вы все еще можете использовать его для обработки "пакетов" SQL-команд ..


d_train2014

Спасибо за ваш ответ. Я все еще нахожусь на ногах со всем этим, поэтому я рассмотрю ваши предложения.

Я уже пробовал подход InfoMessage, и он ничего не показывает.