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

.net 可以由System.Data.SqlClient.SqlCommand对象执行的T-SQL有哪些限制?,.net,sql-server,tsql,migration,sqlcommand,.net,Sql Server,Tsql,Migration,Sqlcommand,我有一些像这样的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 = 'Sche

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

是的,这可以通过
SqlCommand
执行-最简单的方法是将其放入存储过程并执行

你有什么问题


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

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

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

  • 联系
  • 命令
  • 交易
  • 数据阅读器
  • 数据集
  • 数据适配器
  • 命令对象可以接受任何符合SQL(ANSI SQL)的查询。如果你打算进行交易,那么我建议你处理交易

  • 通过ADO.NET事务…以下是一些
  • 而是从命令对象调用存储过程,而不是将其作为SQL的一部分传递

  • 这是一个关于InfoMessage的好提示,谢谢!太糟糕了,我正在使用System.Data.Common类。没有特别的问题,我只是想避免走错路。