Visual Basic サンプル集 |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 > Azure > Cosmos DB
SQL API でアイテムをSQLでクエリする
2021/7/4
この記事は 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
この例で使用している 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