Каковы ограничения T-SQL, которые могут быть выполнены объектом System.Data.SqlClient.SqlCommand? - PullRequest
5 голосов
/ 13 апреля 2011

У меня есть некоторый Transact-SQL, который выглядит так, может ли он быть выполнен через объект SqlCommand или мне нужно начать изучение объектов управления Sql?

BEGIN TRANSACTION
BEGIN TRY

    IF NOT EXISTS
    (
        SELECT * 
        FROM INFORMATION_SCHEMA.TABLES 
        WHERE TABLE_CATALOG = (SELECT DB_NAME())
        AND TABLE_NAME = 'SchemaVersion'
    )
        BEGIN
            Print 'Migrating up...'

            CREATE TABLE SchemaVersion (
                Id INT IDENTITY(1,1) NOT NULL,
                Version INT NOT NULL,
                CONSTRAINT PK_SchemaVersion PRIMARY KEY CLUSTERED (
                    Id ASC
                )
            )

            INSERT INTO SchemaVersion (Version) VALUES(1)

            PRINT 'Migrated from 0 to 1'
        END
    ELSE IF (SELECT Version FROM SchemaVersion) = 1
        BEGIN
            Print 'Migrating down...'

            DROP TABLE Dia_SchemaVersion

            PRINT 'Migrated from 1 to 0'
        END
     ELSE
        PRINT 'Not migrating...'

    COMMIT TRANSACTION;

END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
END CATCH

Ответы [ 3 ]

3 голосов
/ 13 апреля 2011

Просто оберните это в хранимую процедуру и вызовите ее с помощью метода .ExecuteNonQuery () SqlCommand. Вы можете «прослушать» сообщения печати из вашего кода .Net, обработав событие InfoMessage SqlConnection . Это также помогает установить для свойства подключения FireInfoMessageEventOnUserErrors значение true.

3 голосов
/ 13 апреля 2011

Да, это может быть выполнено с помощью SqlCommand - самый простой способ - поместить это в хранимую процедуру и выполнить ее.

Какие у вас проблемы?

Что касаетсяизучение SSMS - если вы разрабатываете на SQL Server, это неплохая идея.

1 голос
/ 13 апреля 2011

Вы должны понимать ADO.NET и как работают объекты, прежде всего

  1. Соединение
  2. Команда
  3. Транзакция
  4. DataReader
  5. Набор данных
  6. DataDapter

Объект Command может принимать любой совместимый с SQL (ANSI SQL) запрос.Если вы собираетесь проводить транзакции, то я предлагаю вам обрабатывать транзакции

  1. Через транзакцию ADO.NET ... вот некоторые чтения
  2. Вызов сохраненноговместо процедуры, из объекта команды, вместо того, чтобы передавать его как часть SQL.
...