- PR -

VWD2005 での警告について

1
投稿者投稿内容
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-08-17 14:06
■ASP.NET2.0
■VWD2005

現在、VWD2005 を使って、Webアプリケーションを作成しております。
VS.NET2003 で作成したクラスを今回も利用しようと思っていましたが、
まったく同じ内容でも VWD2005 では警告が出てしまいます。
(VS.NET2003 の時は、警告は出ていませんでした)

以下が、クラスの内容です。VWD2005 用にカスタマイズしてありますが、基本は VS.NET2003 の時に使用していたものと同じです。
コード:
    Public Overloads Shared Function Get_DataSet(ByVal ws_Sql As String) As DataSet
        Dim wo_DataSet As DataSet                   ' データセットオブジェクト
        Dim wo_Adapter As OracleDataAdapter         ' Oracleアダプタオブジェクト

        ' 接続オブジェクト 作成
        Dim wo_Conn As New OracleConnection(System.Configuration.ConfigurationManager.AppSettings("connstr"))

        Try
            ' Oracle接続
            wo_Conn.Open()

            Try
                ' データセットオブジェクト 作成
                wo_DataSet = New DataSet
                ' アダプタオブジェクト 作成
                wo_Adapter = New OracleDataAdapter(ws_Sql, wo_Conn)
                ' データセット取得
                wo_Adapter.Fill(wo_DataSet)

                ' 正常終了
                Return wo_DataSet

            Catch exOra As OracleException
                ' エラーの場合、空のデータセットを返す
                Return Nothing
                Throw
            Finally
                If Not wo_DataSet Is Nothing Then wo_DataSet.Dispose()
                If Not wo_Adapter Is Nothing Then wo_Adapter.Dispose()
            End Try
        Finally
            If Not wo_Conn Is Nothing Then wo_Conn.Close()
            If Not wo_Conn Is Nothing Then wo_Conn.Dispose()
        End Try
    End Function



警告が出ているのは、
   If Not wo_DataSet Is Nothing Then wo_DataSet.Dispose()
   If Not wo_Adapter Is Nothing Then wo_Adapter.Dispose()
の2行で、

コード:
変数 'wo_DataSet' は、値が割り当てられる前に使用されています。
Null 参照の例外が実行時に発生する可能性があります。

変数 'wo_Adapter' は、値が割り当てられる前に使用されています。
Null 参照の例外が実行時に発生する可能性があります。


という警告です。
これは、作りがマズイのでしょうか? それとも他に問題があるのでしょうか?
作りがマズイ場合、その箇所を教えていただけると助かります。

よろしくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-08-17 14:59
引用:

ひろれいさんの書き込み (2006-08-17 14:06) より:

これは、作りがマズイのでしょうか? それとも他に問題があるのでしょうか?
作りがマズイ場合、その箇所を教えていただけると助かります。


2005 からコンパイラが色々なお世話をしてくれるようになりました。
宣言位置にて明示的に Nothing で初期化してください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Katze
ベテラン
会議室デビュー日: 2005/11/01
投稿数: 74
お住まい・勤務地: 1台でも せんだい
投稿日時: 2006-08-17 15:02
VWD2005は使用していなく、エラーから推測しているので
間違ってるかもですが…

wo_DataSet = New DataSet
wo_Adapter = New OracleDataAdapter(ws_Sql, wo_Conn)

を行う前に何らかの例外が発生した場合にFinallyで
wo_DataSet,wo_Adapterを参照する可能性があるからではないでしょうか?
(このときwo_DataSet,wo_Adapterは不定値になっているから?)

ですので
Dim wo_DataSet As DataSet = Nothing
Dim wo_Adapter As OracleDataAdapter = Nothing

とすれば大丈夫なような…

# と書いているうちに じゃんぬさん からの書き込みが


[ メッセージ編集済み 編集者: Katze 編集日時 2006-08-17 15:04 ]
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-08-17 15:09
じゃんぬさん、Katzeさん、回答ありがとうございました。

そういうことだったんですね。
「変数は、初期化してから使いなさい」という方向へ導いているのでしょうか・・・

原因が分かってスッキリしました。
Nothing で初期化しておきます。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)