- - PR -
Transaction 処理について
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-07-22 11:01
こんにちは。Transaction処理について、困っているので投稿しました。
VB.NETでの開発です。サーバはOracle9iR2、プロバイダはODP.NETを使用します。 ----------------------- Dim cn As New Oracle.DataAccess.Client.OracleConnection() 'コネクション Dim cmd As New Oracle.DataAccess.Client.OracleCommand() 'コマンド Dim myTrans As Oracle.DataAccess.Client.OracleTransaction 'トランザクション cn.ConnectionString = "接続文字列" cn.Open() cmd.Connection = cn myTrans = cn.BeginTransaction() cmd.Transaction = myTrans <--- ココ ----------------------- 矢印の部分に、「プロパティ'Transaction'は'ReadOnly'です」というメッセージが出て、トランザクションを設定できません。 サンプル等見ながら書いたつもりなのですが、何か抜けている設定などがあるのでしょうか?どなたか、ご存知の方、アドバイスをよろしくお願いします! |
|
投稿日時: 2003-07-22 11:20
こんにちはNYRLです。
コマンドをコネクションから作成してもダメですか? Dim cmd As Oracle.DataAccess.Client.OracleCommand() = cn.CreateCommand() SQLServerでやっていた時に new したコマンドに代入できなかった 記憶があります。 [ メッセージ編集済み 編集者: NYRL 編集日時 2003-07-22 11:28 ] |
|
投稿日時: 2003-07-22 11:43
-------------
'Dim cmd As New Oracle.DataAccess.Client.OracleCommand() コメントにしました 'cmd.Connection = cn コメントにしました cn.Open() Dim cmd As Oracle.DataAccess.Client.OracleCommand() = cn.CreateCommand() myTrans = cn.BeginTransaction() cmd.Transaction = myTrans ------------- ううん、試してみたのですが、 やはり、同じ場所で「ReadOnlyです」というメッセージがでます。。 |
|
投稿日時: 2003-07-22 12:23
> cmd.Transaction = myTrans
読み取り専用プロパティなので、設定不可能です。 下記のとおり試してみてください。 OracleTransaction txn; OracleCommand cmd; txn = con.BeginTransaction(); cmd = new OracleCommand("", con); # C#ですみません...。 |
|
投稿日時: 2003-07-22 14:47
NYRLさん、ななさん、ありがとうございます。
>読み取り専用プロパティなので、設定不可能です そうだったんですね・・・ ------ Dim cn As New Oracle.DataAccess.Client.OracleConnection() Dim cmd As Oracle.DataAccess.Client.OracleCommand Dim myTrans As Oracle.DataAccess.Client.OracleTransaction cn.Open() myTrans = cn.BeginTransaction() cmd = new OracleCommand("", cn) cmdDelete.CommandText = "delete from 社員テーブル where 氏名='テスト'" Call cmdDelete.ExecuteNonQuery myTrans.Commit ------- 例えばですが、上記ようなやりかたでうまくいきました! どうもありがとうございました! |
|
投稿日時: 2003-07-22 14:52
MSDNによると
Transaction プロパティに既に特定の値が設定されていて、コマンドが実行中の場合は、このプロパティは設定できません。 OracleCommand オブジェクトと同じ OracleConnection に接続されていない OracleTransaction オブジェクトをトランザクション プロパティに設定すると、次回のステートメント実行時に例外がスローされます。 となっていてOracleTransaction のサンプルでは Dim myConnection As New OracleConnection(myConnString) myConnection.Open() Dim myCommand As OracleCommand = myConnection.CreateCommand() Dim myTrans As OracleTransaction myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted) myCommand.Transaction = myTrans となっているので順番に気をつければ代入できるはずなんですけどね・・・ とりあえずできたからいいのかな) |
|
投稿日時: 2003-07-22 15:17
>順番に気をつければ代入できるはず
なるほど!まさにこのページを参考にしていたんですが、確かに、 自分の作りたいようにプログラムの順番を換えていました。 その結果、上記のようなことが起こっていたんですね。 本当にどうもありがとうございました! |
|
投稿日時: 2003-07-22 18:32
> MSDNによると
恐れ入ります。 念のために、C# + ODP.NETで確認していますが、どうしても代入できません。 OracleConnection con = new OracleConnection("..."); con.Open(); OracleCommand cmd = con.CreateCommand(); OracleTransaction txn = con.BeginTransaction(); cmd.Transaction = txn; // ← ここでコンパイルエラー発生! MSDNのどこにサンプルが記述されているか教えていただけませんか? # ちなみに、わたしはODP.NETのOracleTransaction Classに書かれているサンプルを参考にしました。 |