5

このように llok する 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
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. DataReader
  5. データセット
  6. DataDapter

Commandオブジェクトは、SQL(ANSI SQL)準拠のクエリを受け取ることができます。取引を行う場合は、取引を処理することをお勧めします

  1. ADO.NETトランザクション経由...ここにいくつかの読書があります
  2. SQLの一部として渡すのではなく、コマンドオブジェクトからストアドプロシージャを呼び出します。
于 2011-04-13T19:02:47.923 に答える