5

我有一些类似这样的 Transact-SQL,它可以通过 SqlCommand 对象执行,还是我需要开始学习 Sql Management Objects?

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
4

3 回答 3

3

是的,这可以执行SqlCommand——最简单的方法是将它放在一个存储过程中并执行它。

你有什么问题?

至于学习 SSMS——如果你在 SQL Server 上开发,那不是一个坏主意。

于 2011-04-13T19:00:17.547 回答
3

只需将其包装在存储过程中并使用 SqlCommand 的 .ExecuteNonQuery() 方法调用它。您可以通过处理SqlConnection 的 InfoMessage 事件“收听”来自 .Net 代码的打印消息。它还有助于将连接的 FireInfoMessageEventOnUserErrors 属性设置为 true。

于 2011-04-13T19:00:48.103 回答
1

您需要了解 ADO.NET 以及对象的工作原理,主要是

  1. 联系
  2. 命令
  3. 交易
  4. 数据读取器
  5. 数据集
  6. 数据适配器

Command 对象可以接受任何符合 SQL (ANSI SQL) 的查询。如果您要进行交易,那么我建议您处理交易

  1. 通过 ADO.NET 事务...这里有一些阅读
  2. 而是从命令对象调用存储过程,而不是将其作为 SQL 的一部分传递。
于 2011-04-13T19:02:47.923 回答