- - PR -
[SQLサーバ2000]トランザクション内でのデータテーブルへの取得
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2006-06-15 15:34
いつもお世話になっております。
SQLサーバ2000とC#を使っております。 トランザクションをきって、その中でデータテーブルにデータを取得する コマンドを入れています。 1.トランザクション開始 2.INSERT文 3.データテーブルへのデータ取得 4.INSERT文 5.トランザクション終了 という流れにしたいのですが、 3の部分で Execute は、コマンドに割り当てられた接続が保留状態であるローカルのトランザクションにあるとき、トランザクション オブジェクトを持つコマンドが必要です。コマンドの Transaction プロパティがまで初期化されていません。 というエラーがでてしまいます。 複数データを保持する(複数行複数内容を個別に保持する)何かよい方法はないでしょうか。 また、データテーブルについて理解せず、サンプルコードをそのまま移してしまったため、 原因がよくわかっていません。 データテーブルの仕組み的にだめなのでは、と思っているのですが・・・。 データテーブルの仕組みが理解できるものがあれば教えてください。 | ||||
|
投稿日時: 2006-06-29 17:44
お疲れ様です。 TimberLandChapel です。 以下のようなことを行おうとしているといいうことでいいでしょうか? トランザクション中の更新処理の間に, トランザクションに参加していない選択は行えません。 かといって,トランザクションに参加することは可能ですが, 根本の話から, 挿入中のテーブルを途中でデータ取得するシナリオ自体を見直さなければいけないと思います。 1.更新に必要な情報を集める 2.トランザクションを開始する 3.実際の更新を行う 4.トランザクションの評価を行う という自然な流れになるようにもう一度要件を確認してみてください。 [CODE]----- Const connectionString As String = "Integrated Security=SSPI;Initial Catalog=Test;Data Source=SERVERMETATRON\SANDALPHON;" Const selectQuery As String = "SELECT * FROM [TestTable] ORDER BY [ID] ASC;" Dim connection As New SqlClient.SqlConnection(connectionString) Dim adapter As New SqlClient.SqlDataAdapter(selectQuery, connection) Dim testTable As New DataTable adapter.Fill(testTable) Dim insertQuery As String = "INSERT INTO [Test].[dbo].[TestTable]([DataA], [DataB]) VALUES(@DataA, @DataB);" Dim insert As New SqlClient.SqlCommand(insertquery, connection) Try With insert.Parameters .Add(New SqlClient.SqlParameter("@DataA", SqlDbType.NChar)) .Add(New SqlClient.SqlParameter("@DataB", SqlDbType.NChar)) End With connection.Open() insert.Transaction = connection.BeginTransaction For counter As Int32 = 4 To 5 With insert.Parameters .Item("@DataA").Value = counter .Item("@DataB").Value = counter End With insert.ExecuteNonQuery() ' このコメントをはずしてトランザクションに参加すればエラーはでなくなるが。。。 'adapter.SelectCommand.Transaction = insert.Transaction adapter.Fill(testTable) Next insert.Transaction.Commit() Catch ex As Exception insert.Transaction.Rollback() Stop Finally connection.Close() End Try [CODE]----- まずはこちらから,参考にしていただけますか。 http://www.microsoft.com/japan/msdn/net/upgrade/adonetprogmsdn.asp ---------- TimberLandChapel http://blogs.timberlandchapel.com/blogs/timberlandchapel/ | ||||
1
