ADOとの連携でデータの参照を行う方法について説明します。
本サンプルコードは、取得データをWebページ上に表示します。
アプリケーションの手順
コネクションを接続します。詳細は、“C.2.1 接続および切断”を参照してください。
Recordsetオブジェクトを生成します。
Recordset.OpenメソッドでRecordsetオブジェクトを開きます。
Recordsetオブジェクトよりデータを取得します。
Recordset.EOFプロパティでカレント行がEOFかを確認します。
Fields.Countプロパティで列数を確認します。
Field.Valueプロパティでデータを取得します。
Recordset.MoveNextメソッドでカレント行を次の行へと移動します。
Recordset.CloseメソッドでRecordsetオブジェクトを閉じます。
コネクションを切断します。
オブジェクトを破棄します。
エラー処理については、“C.2.9 エラー処理”を参照してください。
注意
Recordset.EOFプロパティでカレント行がEOFかどうか確認後は、以下のエラーがアプリケーション側で認識できなくなります。
JYP2099E デッドロックが発生しました.
JYP5014E スキーマ“@1@”の表“@2@”は占有中です.
これらのエラーをアプリケーション側で認識するタイミングは、Recordset.MoveFirstメソッドを実行するか、データを参照した時です。上記エラーを認識するためには、EOFプロパティを確認せずにMoveFirstメソッドの実行またはデータを参照してください。
ただし、SELECT文の検索結果が0件であった場合、Visual Basicの実行時エラー“3021”が発生します。エラー処理については、“C.2.9 エラー処理”を参照してください。
Public Class _Default
    Inherits Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        'オブジェクト宣言
        Dim Con As ADODB.Connection
        Dim Rst As ADODB.Recordset
        Dim i As Integer
        Dim msgstr As String
        'Connectionオブジェクトの生成と設定
        Con = New ADODB.Connection
        Con.ConnectionString = "DSN=DSN01;UID=USER01;PWD=PASS01;"
        On Error GoTo ErrorProc
        '1. コネクション接続
        Con.Open()
        '2. Recordsetオブジェクトの生成
        Rst = New ADODB.Recordset
        '3. Recordsetオブジェクトを開く
        Rst.Open("SELECT * FROM TESTTBL", Con,
         ADODB.CursorTypeEnum.adOpenForwardOnly,
         ADODB.LockTypeEnum.adLockReadOnly,
         ADODB.CommandTypeEnum.adCmdText)
        '4. データの取得
        'EOFまで繰り返し
        Do Until Rst.EOF
            '列数の取得
            For i = 0 To Rst.Fields.Count - 1
                'データの取得
                msgstr &= Rst.Fields(i).Value() & " "
            Next
            msgstr &= "<br>"
            '行の位置づけ
            Rst.MoveNext()
        Loop
        '取得データの表示
        Label1.Text = "Recordset<br>" & msgstr
        '5. Recordsetオブジェクトを閉じる
        Rst.Close()
        '6. コネクション切断
        Con.Close()
        '7. オブジェクトの破棄
        Rst = Nothing
        Con = Nothing
        Exit Sub
        'エラー処理
ErrorProc:
        'エラー処理ルーチンを記述
        Label1.Text = "No Connect<br>▲▼  COMMUNICATION OFF LINE  ▲▼"
    End Sub
End Class