Visual Basic サンプル集 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 > Azure > Cosmos DB
テーブルAPI ですべてのエンティティを取得する
2021/6/6
この記事は Azure Cosmos DB テーブル API を対象にしています。
テーブルにあるすべてのエンティティを取得する
前提
- Azure Cosmos DB のアカウントがあり、テーブルAPIのデータベース上に TestTable というテーブルが存在する。
- NuGet で Microsoft.Azure.Cosmos.Table パッケージをインストールしている。 → NuGetの使用方法
- Imports Microsoft.Azure.Cosmos.Table がソースコードの冒頭付近に記載されている。
メモ:接続文字列の確認方法
注意:試しに実行する場合は、コメントアウトした 取得する最大件数を絞りたい場合 を有効にすることをお勧めします。
'▼Cosmos DBに接続
'接続文字列は環境に応じて指定してください。
Dim connectionString As String = "DefaultEndpointsProtocol=https;AccountName=xxxxxx;AccountKey=U2V0IHlvdXIgYWNjb3VudCBrZXkgZnJvbSBhenVyZSBwb3J0YWw=;TableEndpoint=https://xxxxxx.table.cosmos.azure.com:443/;"
Dim storageAccount As CloudStorageAccount = CloudStorageAccount.Parse(connectionString)
'▼テーブルへの参照を取得
Dim tableClient As CloudTableClient = storageAccount.CreateCloudTableClient()
Dim table As CloudTable = tableClient.GetTableReference("TestTable")
'▼実行
Dim query As New TableQuery()
'query = query.Take(5) ' ←取得する最大件数を絞りたい場合
For Each entity In table.ExecuteQuery(query)
Debug.Write(entity.PartitionKey & vbTab)
Debug.Write(entity.RowKey & vbTab)
'ここから下はエンティティに含まれるプロパティによって変更する必要があります。
Debug.Write(entity.Properties("birthDay").ToString & vbTab)
Debug.Write(entity.Properties("note"))
Debug.WriteLine("")
Next
テーブルにあるすべてのエンティティを取得し、クラスにマッピングする
この例では、PartitionKey が "家康"、 RowKey が"徳川"であるエンティティを取得します。
前提
- Azure Cosmos DB のアカウントがあり、テーブルAPIのデータベース上に TestTable というテーブルが存在する。
- NuGet で Microsoft.Azure.Cosmos.Table パッケージをインストールしている。 → NuGetの使用方法
- Imports Microsoft.Azure.Cosmos.Table がソースコードの冒頭付近に記載されている。
メモ:接続文字列の確認方法
注意:試しに実行する場合は、コメントアウトした 取得する最大件数を絞りたい場合 を有効にすることをお勧めします。
'▼Cosmos DBに接続
'接続文字列は環境に応じて指定してください。
Dim connectionString As String = "DefaultEndpointsProtocol=https;AccountName=xxxxxx;AccountKey=U2V0IHlvdXIgYWNjb3VudCBrZXkgZnJvbSBhenVyZSBwb3J0YWw=;TableEndpoint=https://xxxxxx.table.cosmos.azure.com:443/;"
Dim storageAccount As CloudStorageAccount = CloudStorageAccount.Parse(connectionString)
'▼テーブルへの参照を取得
Dim tableClient As CloudTableClient = storageAccount.CreateCloudTableClient()
Dim table As CloudTable = tableClient.GetTableReference("TestTable")
'▼実行
Dim query As New TableQuery(Of PersonEntity)
'query = query.Take(5) ' ←取得する最大件数を絞りたい場合
For Each entity As PersonEntity In table.ExecuteQuery(query)
Debug.Write(entity.PartitionKey & vbTab)
Debug.Write(entity.RowKey & vbTab)
'ここから下はエンティティに含まれるプロパティによって変更する必要があります。
Debug.Write(entity.birthDay.ToString() & vbTab)
Debug.Write(entity.note)
Debug.WriteLine("")
Next
この例で使用している PersonEntity は次の通りです。
PersonEntity クラス
Public Class PersonEntity
Inherits TableEntity
<Microsoft.Azure.Cosmos.Table.IgnoreProperty>
Public Property lastName As String
Get
Return PartitionKey
End Get
Set(value As String)
PartitionKey = value
End Set
End Property
<Microsoft.Azure.Cosmos.Table.IgnoreProperty>
Public Property firstName As String
Get
Return RowKey
End Get
Set(value As String)
RowKey = value
End Set
End Property
Public Property birthDay As Date?
Public Property note As String
End Class
メモ:エンティティは TableEntity を継承するのが楽です。この例ではキー項目にIgnoreProperty属性をつけて PartitionKey と RowKey にそれぞれマッピングしています。その代わりにPartitionKeyプロパティ、RowKeyプロパティを直接使用する方法もあります。
テーブルにあるすべてのエンティティを取得し、JSONで表現する
前提
- Azure Cosmos DB のアカウントがあり、テーブルAPIのデータベース上に TestTable というテーブルが存在する。
- NuGet で Microsoft.Azure.Cosmos.Table パッケージをインストールしている。 → NuGetの使用方法
- Imports Microsoft.Azure.Cosmos.Table がソースコードの冒頭付近に記載されている。
メモ:接続文字列の確認方法
注意:試しに実行する場合は、コメントアウトした 取得する最大件数を絞りたい場合 を有効にすることをお勧めします。
'▼Cosmos DBに接続
'接続文字列は環境に応じて指定してください。
Dim connectionString As String = "DefaultEndpointsProtocol=https;AccountName=xxxxxx;AccountKey=U2V0IHlvdXIgYWNjb3VudCBrZXkgZnJvbSBhenVyZSBwb3J0YWw=;TableEndpoint=https://xxxxxx.table.cosmos.azure.com:443/;"
Dim storageAccount As CloudStorageAccount = CloudStorageAccount.Parse(connectionString)
'▼テーブルへの参照を取得
Dim tableClient As CloudTableClient = storageAccount.CreateCloudTableClient()
Dim table As CloudTable = tableClient.GetTableReference("TestTable")
'▼実行
Dim query As New TableQuery(Of PersonEntity)
'query = query.Take(5) ' ←取得する最大件数を絞りたい場合
Dim entities = table.ExecuteQuery(query)
'結果をJSON化。
'日本語の文字列などはエンコードされて確認しにくいので、この例ではエンコードしないようにオプション設定します。
Dim joption As New System.Text.Json.JsonSerializerOptions()
joption.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
joption.WriteIndented = True 'ついでに、改行とインデントで整形します。
Dim json As String = System.Text.Json.JsonSerializer.Serialize(entities, joption)
'[別解]日本語の文字列などがエンコードされても良い場合は、次の1行だけでJSON化できます。
'Dim json As String = System.Text.Json.JsonSerializer.Serialize(entities)
'取得した全エンティティをJSONで出力します。
Debug.WriteLine("取得したエンティティ: " & Environment.NewLine & json)
メモ:この例で使用している PersonEntity は 上述の例 と同じです。
メモ:プロパティに System.Text.Json.Serialization.JsonIgnore 属性を付けると、そのプロパティはJSON化の対象外にできます。
参考
.NET Standard SDK を使用した Azure Cosmos DB Table API | Microsoft Docs
クイック スタート:.NET での Table API の使用 - Azure Cosmos DB | Microsoft Docs
VB6では
XMLHttpRequestの機能でREST APIを呼び出すことで、同じことを実現できるかもしれません。