【问题标题】:What are the limitations of T-SQL that can be executed by a System.Data.SqlClient.SqlCommand object?System.Data.SqlClient.SqlCommand 对象可以执行的 T-SQL 有哪些限制?
【发布时间】:2011-08-04 23:26:55
【问题描述】:

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

【问题讨论】:

    标签: .net sql-server tsql migration sqlcommand


    【解决方案1】:

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

    你有什么问题?

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

    【讨论】:

    • 没有什么特别的问题,我只是想避免走错路。
    【解决方案2】:

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

    【讨论】:

    • 这是关于 InfoMessage 的一个很好的提示,谢谢!太糟糕了,我正在使用 System.Data.Common 类。
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 2014-02-12
      • 2011-01-16
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多