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

テーブルAPI ですべてのエンティティを取得する

2021/6/6

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

この記事は Azure Cosmos DB テーブル API を対象にしています。

Azure Cosmos DB Table API の概要 | Microsoft Docs

 

 

テーブルにあるすべてのエンティティを取得する

前提

  • Azure Cosmos DB のアカウントがあり、テーブルAPIのデータベース上に TestTable というテーブルが存在する。
  • NuGet で Microsoft.Azure.Cosmos.Table パッケージをインストールしている。 → NuGetの使用方法
  • Imports Microsoft.Azure.Cosmos.Table がソースコードの冒頭付近に記載されている。

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

注意:試しに実行する場合は、コメントアウトした 取得する最大件数を絞りたい場合 を有効にすることをお勧めします。

VB2015対応 VB2017対応 VB2019対応

'▼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

Debug.WriteLineが表示される場所

 

 

テーブルにあるすべてのエンティティを取得し、クラスにマッピングする

この例では、PartitionKey が "家康"、 RowKey が"徳川"であるエンティティを取得します。

前提

  • Azure Cosmos DB のアカウントがあり、テーブルAPIのデータベース上に TestTable というテーブルが存在する。
  • NuGet で Microsoft.Azure.Cosmos.Table パッケージをインストールしている。 → NuGetの使用方法
  • Imports Microsoft.Azure.Cosmos.Table がソースコードの冒頭付近に記載されている。

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

注意:試しに実行する場合は、コメントアウトした 取得する最大件数を絞りたい場合 を有効にすることをお勧めします。

VB2015対応 VB2017対応 VB2019対応

'▼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

Debug.WriteLineが表示される場所

 

この例で使用している PersonEntity は次の通りです。

PersonEntity クラス

VB2015対応 VB2017対応 VB2019対応

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 がソースコードの冒頭付近に記載されている。

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

注意:試しに実行する場合は、コメントアウトした 取得する最大件数を絞りたい場合 を有効にすることをお勧めします。

VB2015対応 VB2017対応 VB2019対応

'▼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)

Debug.WriteLineが表示される場所

メモ:この例で使用している 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対応 VB6では XMLHttpRequestの機能でREST APIを呼び出すことで、同じことを実現できるかもしれません。