問題は、私は "取引"を伝票ヘッダ(注文テーブル)と詳細(注文詳細テーブル)..と記録しなければならないということです。送り状として言う..テーブルヘッダとアイテム(DETAIL)は、あなたはテーブルの詳細の1つ以上の項目です。注文と注文詳細テーブル(nレジストリ)のトランザクションを作成する方法は?
質問:Nレコード(パラメータセット)
EDITを渡す方法はあります。私はこのトランザクションをSQL Serverのアプリケーションクライアントではなく書いておく予定です
問題は、私は "取引"を伝票ヘッダ(注文テーブル)と詳細(注文詳細テーブル)..と記録しなければならないということです。送り状として言う..テーブルヘッダとアイテム(DETAIL)は、あなたはテーブルの詳細の1つ以上の項目です。注文と注文詳細テーブル(nレジストリ)のトランザクションを作成する方法は?
質問:Nレコード(パラメータセット)
EDITを渡す方法はあります。私はこのトランザクションをSQL Serverのアプリケーションクライアントではなく書いておく予定です
データベースではなく、クライアント(C#アプリケーションなど)からの接続でトランザクションを開く必要があります。擬似コード:
はここにあなたの特定のケースを説明するためにわずかに変更され、マイクロソフトからの例です: http://msdn.microsoft.com/en-us/library/2k2hy99x(v=VS.100).aspx
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// Start a local transaction.
SqlTransaction sqlTran = connection.BeginTransaction();
// Enlist a command in the current transaction.
SqlCommand command = connection.CreateCommand();
command.Transaction = sqlTran;
try
{
// Execute two separate commands.
command.CommandText =
"INSERT INTO Order ...";
command.ExecuteNonQuery();
//注:あなたはそれを渡すことができますので、あなたのコマンドは、おそらく、新しい秩序のIDを返す必要がありますOrderItemは以下を挿入します。その場合、IDを返すためにcommand.ExecuteScalar()またはcommand.ExecuteReader()を使用することができます。最も単純なシナリオでは、テキストとして「@@ SCOPE_IDENTITY()を選択し、」持つ別のコマンドを実行することができ、それはあなたの挿入を処理するためのストアドプロシージャを記述するために多くの方が良いでしょう(とIDを返す)
foreach (var item in order.Items)
{
command.CommandText = "INSERT INTO OrderItem ... ";
command.ExecuteNonQuery();
}
// Commit the transaction.
sqlTran.Commit();
}
catch (Exception ex)
{
// Handle the exception if the transaction fails to commit.
Console.WriteLine(ex.Message);
try
{
// Attempt to roll back the transaction.
sqlTran.Rollback();
}
catch (Exception exRollback)
{
// Throws an InvalidOperationException if the connection
// is closed or the transaction has already been rolled
// back on the server.
Console.WriteLine(exRollback.Message);
}
}
}
これ確かにすることができますどのようにデータアクセス方法を使用するかによって異なります。これは純粋な 'SqlCommand'やlinq-to-sqlのようなものを使用していますか? –
いいえ、私はクライアントアプリケーションでデータセットを使用しています。そして私はストアドプロシージャ名を呼び出すだけです – Darf
SQL 2008/.Netでは、SQLにデータテーブルをダンプすることができます。これを参照してくださいhttp://www.eggheadcafe.com/community/ado/10/10138579/passing-dataset-to-stored-procedure.aspx – u07ch