ヘッダー
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が表示される場所