2016-11-14 11 views
0

私の質問は、たとえば単一のトランザクションの範囲内で複数の明細を注文に挿入する方法に関するものです。単一のトランザクションのスコープ内で同じADO.NETコマンドを複数回呼び出す

すべての広告申込情報を挿入するか、トランザクションをロールバックする必要があります。

カスタムCLRオブジェクトをパラメータとして送信せずに、同じテーブルに複数の挿入を行うことはできますか?これはテーブル値のパラメータと同じですか? MyInsertSingleLineItemCommandをループ内で呼び出すことができ、呼び出しごとに1つの広告申込情報を挿入できますか?中間一時テーブルが必要ですか?

+0

dotnetにはSqlTransactionクラスがあり、これを使用して開始/コミット/ロールバックできます。 https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction(v=vs.110).aspx –

+0

はい、可能ですが、テーブル値のパラメータはこれより効率的です場合。 –

答えて

1

は、同じテーブルに複数の挿入は、テーブル値 パラメータに相当し、パラメータとして カスタムCLRオブジェクトを送信することなく行うことができますか?

はい、SqlTransactionを使用して1つのトランザクションで行を行えます。

は、各呼び出しで 1行項目を挿入し、ループ内で呼び出すことがMyInsertSingleLineItemCommandできますか?

以下の例のコードです。

using (SqlConnection cn = new SqlConnection("YOUR CONNECTION STRING") 
{ 
    cn.Open(); 
    using (SqlTransaction tr = cn.BeginTransaction()) 
    { 
      // your looping code here persisting to sql server db 
      tr.Commit(); 
    } 
} 

また、TransactionScopeを使用してこれを行うこともできます。

using (var ts = new TransactionScope()) 
{ 
    using (SqlConnection connection = new SqlConnection("YOUR CONNECTION STRING")) 
    { 
     connection.Open(); 
     // your looping code here persisting to sql server db 
    } 

    ts.Complete(); 
} 

我々は仲介一時テーブルが必要ですか?

いいえ一時テーブルは必要ありません。

これは、SqlBulkCopyまたはTable Value Parameterを使用してSql Serverにデータを渡すことを検討すると言います。それはあなたの要求に依存します。

More info here on TVPs

関連する問題