C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: 次フォームでトランザクションして表示


(過去ログ 50 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■27338 / inTopicNo.1)  次フォームでトランザクションして表示
  
□投稿者/ ニッパー (1回)-(2008/11/04(Tue) 11:30:37)

分類:[VB.NET/VB2005 以降] 

はじめまして。VB2008でoracleに接続し、データベースの編集する勉強をしています。
最初のフォームでoracleからデータを取得表示し、接続を切らずに、次フォームを表示する際、トランザクションをかけると"nullreferenceExceptionはハンドルされません"と表示されてします。この場合トランザクションの処理をどこですればよろしいのでしょうか?
アドバイスお願いします。
(宣言はモジュールで記載)
↓コード
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Try
            '接続する
            cnn.ConnectionString = "コード"
            '接続を確立
            cnn.Open()
            '接続済みの Connection を指定する 
            strSQL.Connection = cnn

            'クエリ文字列を指定
            strSQL.CommandText = "コード"
            'レコードデータを取得 
            Dim ADP As New OracleDataAdapter(strSQL)

            ADP.Fill(ds, "コード")
            dt = ds.Tables("コード")
            'データをグリッドにあてる
            DataGridView1.DataSource = dt

          
        Catch ex As Exception
            MessageBox.Show("通信障害が発生しました。フォームを閉じます。 ")
            cnn.Close()
            cnn.Dispose()
            Me.Close()
        End Try

↓フォーム2 ロード

        OraTran = cnn.BeginTransaction() ←ココでエラー

        Try

'ロック処理など

        Catch ex As Exception
            MessageBox.Show("現在、使用されています。フォームを閉じます。 ")
            'ロールバックする()
            OraTran.Rollback()
            cnn.Close()
            cnn.Dispose()
            Me.Close()
        End Try

引用返信 編集キー/
■27340 / inTopicNo.2)  Re[1]: 次フォームでトランザクションして表示
□投稿者/ やじゅ (747回)-(2008/11/04(Tue) 11:43:39)
やじゅ さんの Web サイト
2008/11/04(Tue) 11:57:03 編集(投稿者)
2008/11/04(Tue) 11:49:24 編集(投稿者)

No27338 (ニッパー さん) に返信
> はじめまして。VB2008でoracleに接続し、データベースの編集する勉強をしています。
> 最初のフォームでoracleからデータを取得表示し、接続を切らずに、次フォームを表示する際、
> トランザクションをかけると"nullreferenceExceptionはハンドルされません"と表示されてします。
> この場合トランザクションの処理をどこですればよろしいのでしょうか?

Form1にて、cnnをプロパティまたはフィールドでPublic宣言して
Form2にて、Form1のcnnを参照すればいいでしょう。

はつねさんの投稿により追記:
コネクションプールがあるので、Form2でコネクション接続してもいいですね。
むしろ、そちらの方が。


雑談にて:
本来ですと、モデル、ビュー、コントロールのMVC的にいきますと、業務ロジック部分の
DBのトランザクション系はモデルにあたるので、別クラスにするといいですけどね。
ちなみに、ビュー、コントロールは、Formにあたります。
引用返信 編集キー/
■27342 / inTopicNo.3)  Re[1]: 次フォームでトランザクションして表示
□投稿者/ はつね (868回)-(2008/11/04(Tue) 11:52:43)
はつね さんの Web サイト
No27338 (ニッパー さん) に返信
> はじめまして。VB2008でoracleに接続し、データベースの編集する勉強をしています。
> 最初のフォームでoracleからデータを取得表示し、接続を切らずに、次フォームを表示する際、

接続を保持する理由はなんでしょうか。

ロック処理とかもForm2でやっているようですから、

OraTran = cnn.BeginTransaction()

の直前にForm2のcnnについても

cnn.ConnectionString = "コード"
cnn.Open()

したらいいとおもいます。
特別な理由がないかぎりPublicなどにはせず、上記のADO.NETにおける標準的な手法を使って下さい。

引用返信 編集キー/
■27344 / inTopicNo.4)  Re[2]: 次フォームでトランザクションして表示
□投稿者/ ニッパー (3回)-(2008/11/04(Tue) 11:59:10)
解決できました。また調べつくした際はご指導よろしくお願いします。
ありがとうございました。
解決済み
引用返信 編集キー/
■27349 / inTopicNo.5)  Re[3]: 次フォームでトランザクションして表示
□投稿者/ はつね (869回)-(2008/11/04(Tue) 12:31:34)
はつね さんの Web サイト
No27344 (ニッパー さん) に返信
> 解決できました。また調べつくした際はご指導よろしくお願いします。

解決方法の報告があると嬉しいです。
調べつくした際にも「そういえば、あの方法でやっていたはずだ」みたいに回答も得られやすくなりますよ。

解決済み
引用返信 編集キー/
■27351 / inTopicNo.6)  Re[4]: 次フォームでトランザクションして表示
□投稿者/ ニッパー (4回)-(2008/11/04(Tue) 13:10:17)
>はつね様
・・お恥ずかしい話・・。 モジュールにもフォームにも宣言が書いてあったからフォームの方を消したら動きました。完全な見落としです。すみませんでした。
解決済み
引用返信 編集キー/
■27353 / inTopicNo.7)  Re[5]: 次フォームでトランザクションして表示
□投稿者/ はつね (870回)-(2008/11/04(Tue) 13:53:26)
はつね さんの Web サイト
No27351 (ニッパー さん) に返信
> >はつね様
> ・・お恥ずかしい話・・。 モジュールにもフォームにも宣言が書いてあったから

フォームにコネクションオブジェクトをPublicで宣言して使うのは、VB6までの話であり、
ADO.NETでは一般的ではない事をお忘れなく。

それこそ表示直後にロックして更新まで排他するなどという使い方でなければ、
接続→取得→切断→・・・・・→接続→更新→切断
がADO.NETでの基本だという事も頭の片隅においておいて下さい。


解決済み
引用返信 編集キー/
■27370 / inTopicNo.8)  Re[6]: 次フォームでトランザクションして表示
□投稿者/ 倉田 有大 (324回)-(2008/11/04(Tue) 21:09:36)
> それこそ表示直後にロックして更新まで排他するなどという使い方でなければ、
> 接続→取得→切断→・・・・・→接続→更新→切断
> がADO.NETでの基本だという事も頭の片隅においておいて下さい。

昔仕事でこれやると、処理に時間がかかりすぎていたんですが、今だとコネクションプーリングで一発なんですね。
解決済み
引用返信 編集キー/
■27393 / inTopicNo.9)  Re[7]: 次フォームでトランザクションして表示
□投稿者/ はつね (872回)-(2008/11/05(Wed) 12:27:06)
はつね さんの Web サイト
No27370 (倉田 有大 さん) に返信
>>それこそ表示直後にロックして更新まで排他するなどという使い方でなければ、
>>接続→取得→切断→・・・・・→接続→更新→切断
>>がADO.NETでの基本だという事も頭の片隅においておいて下さい。
>
> 昔仕事でこれやると、処理に時間がかかりすぎていたんですが、今だとコネクションプーリングで一発なんですね。

昔というのが何時のどのバージョンをさすのか不明ですが、コネクションプーリングがあるので影響は除外できるのが現在ですね。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -