ヘッダー
Visual Basic サンプル集
VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

SQL API でアイテムをSQLでクエリする

2021/7/4

→ C# のサンプルに切り替える

この記事は Azure Cosmos DB SQL API を対象にしています。

クイックスタート - Azure Cosmos DB SQL API リソースを管理する .NET コンソール アプリを構築する | Microsoft Docs

  • この記事の内容は Microsoft.Azure.Cosmos パッケージ バージョン 3.19.0 で確認しています。
  • この記事の内容は 容量モード サーバーレス で確認しています。(記事執筆時点ではプレビュー機能です。)

 

 

Name = "徳川家康" のアイテムをすべて取得して、クラスにマッピングする

この例では、name = "徳川家康" に合致するすべてのアイテムを Person クラスにマッピングして取得します。Personクラスの定義は後述します。

前提

  • Azure Cosmos DB のコア(SQL)のアカウントに、MySampleDBデータベースとMySampleContainerコンテナがある。
  • NuGet で Microsoft.Azure.Cosmos パッケージをインストールしている。→ NuGetの使用方法
  • using Microsoft.Azure.Cosmos; がソースコードの冒頭付近に記載されている。

メモ:接続文字列の確認方法

'▼Cosmos DBに接続
'接続文字列は環境に応じて指定してください。
Dim connectionString As String = "DefaultEndpointsProtocol=https;AccountName=xxxxxx;AccountKey=U2V0IHlvdXIgYWNjb3VudCBrZXkgZnJvbSBhenVyZSBwb3J0YWw=;TableEndpoint=https://xxxxxx.table.cosmos.azure.com:443/;"
Dim cosmosClient As New CosmosClient(connectionString)

'▼コンテナへの参照を取得
Dim database As Database = cosmosClient.GetDatabase("MySampleDB")
Dim container As Container = database.GetContainer("MySampleContainer")

'▼クエリを実行して Name = '徳川家康' のアイテムをすべて取得
Dim sql As String = "SELECT * FROM c WHERE c.Name = '徳川家康'"
Dim query As New QueryDefinition(sql)
Dim itor = container.GetItemQueryIterator(Of Person)(query)

'▼結果
While itor.HasMoreResults
    Dim results = itor.ReadNextAsync().GetAwaiter().GetResult()

    For Each p As Person in Results
        Debug.WriteLine($"{p.id} {p.Name} {p.Age}")
    Next
End While

→ Debug.WriteLineが表示される場所

この例で使用している Person クラス は次の通りです。

Person クラス

Public Class Person
    'id は必須プロパティです。
    Public Property id As String
    Public Property Name As String
    Public Property Age As Integer
End Class

 

 

Name = "徳川家康" のアイテムをすべてJSON形式で取得する

この例では、name = "徳川家康" に合致するすべてのアイテムをJSON形式で取得します。マッピング用のクラスは不要です。

前提

  • Azure Cosmos DB のコア(SQL)のアカウントに、MySampleDBデータベースとMySampleContainerコンテナがある。
  • NuGet で Microsoft.Azure.Cosmos パッケージをインストールしている。→ NuGetの使用方法
  • using Microsoft.Azure.Cosmos; がソースコードの冒頭付近に記載されている。
  • .NET Frameworkを使用する場合、NuGet で System.Text.Json をインストールしている。

メモ:接続文字列の確認方法

'▼Cosmos DBに接続
'接続文字列は環境に応じて指定してください。
Dim connectionString As String = "DefaultEndpointsProtocol=https;AccountName=xxxxxx;AccountKey=U2V0IHlvdXIgYWNjb3VudCBrZXkgZnJvbSBhenVyZSBwb3J0YWw=;TableEndpoint=https://xxxxxx.table.cosmos.azure.com:443/;"
Dim cosmosClient As New CosmosClient(connectionString)

'▼コンテナへの参照を取得
Dim database As Database = cosmosClient.GetDatabase("MySampleDB")
Dim container As Container = database.GetContainer("MySampleContainer")

'▼クエリを実行して Name = '徳川家康' のアイテムをすべて取得
Dim sql As String = "SELECT * FROM c WHERE c.Name = '徳川家康'"
Dim itor = container.GetItemQueryStreamIterator(sql)

'▼結果
While itor.HasMoreResults
    Dim results = itor.ReadNextAsync().GetAwaiter().GetResult()

    Using reader As New IO.StreamReader(results.Content)
        '結果は JSON で取得できます。このJSONにはメタ情報も含まれています。
        Dim jsonText As String = reader.ReadToEnd()

        'System.Text.Jsonを使ってJSONの構造にアクセスします。
        Using document = System.Text.Json.JsonDocument.Parse(jsonText)
            'アイテムは Documents という名前のJSON配列に入っています。
            Dim items = document.RootElement.GetProperty("Documents")

            'アイテムのJSON配列を列挙して、アイテムの値を取り出します。
            For Each person In items.EnumerateArray()
                Dim id As String = person.GetProperty("id").GetString
                Dim Name As String = person.GetProperty("Name").GetString
                Dim Age As Integer = person.GetProperty("Age").GetInt32

                Debug.WriteLine($"{id} {Name} {Age}")
            Next 
        End Using
    End Using
End While

→ Debug.WriteLineが表示される場所