可以由System.Data.SqlClient.SqlCommand对象执行的T-SQL有哪些限制?

时间:2011-04-13 18:56:41

标签: .net sql-server tsql migration sqlcommand

我有一些看起来像这样的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

3 个答案:

答案 0 :(得分:3)

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

你有什么问题?

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

  1. 连接
  2. 命令
  3. 交易
  4. 的DataReader
  5. 数据集
  6. DataDapter
  7. Command对象可以采用任何SQL(ANSI SQL)兼容的查询。如果您要进行交易,那么我建议您处理交易

    1. 通过ADO.NET Transaction ...这里有一些reading
    2. 从命令对象调用存储过程,而不是将其作为SQL的一部分传递。