以下の例1、2は、私は次のように書きました。コマンドが実行され、エラーが発生した場合、前のすべてがすでにデータベースに格納されています。ここで取引をするには?SMO.ServerのConnectionContextでトランザクションを使用する方法
[EDIT] 私はこのようにSqlConnectionオブジェクトレベルでトランザクションを開くために、コードを変更する(here何の違いがあってはならないことを、提案しています):
SqlTransaction transaction = null;
try
{
connection = new SqlConnection(sqlConnectionString);
server = new Server(new ServerConnection(connection));
connection.Open();
transaction = connection.BeginTransaction();
server.ConnectionContext.ExecuteNonQuery(script);
transaction.Commit();
}
それはInvalidOPexceptionをスロー:"ExecuteNonQueryは、コマンドに割り当てられた接続が保留中のローカルトランザクションにある場合、コマンドにトランザクションが必要です。コマンドのTransactionプロパティが初期化されていません。
しかし、コマンドオブジェクトにアクセスできる場所はありません。
ファイルにはどのようなコードがありますか? –
@SeanLange GO文で区切られたテーブルとプロシージャの作成/変更です –
これは失敗します。 GOはSSMSのデフォルトバッチ区切り文字です。 SQL Serverは、その意味を理解していません。 –