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

テーブルAPI で検索結果を少しずつ取得する

2021/6/20

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

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

Azure Cosmos DB Table API の概要 | Microsoft Docs

 

 

まず20件取得して、その後続きの20件を取得して、その後もう20件取得する。

前提

  • 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() '検索条件なし。つまり全件を対象とします。
Dim ro As New TableRequestOptions() With { .TableQueryMaxItemCount = 20 } ' 最大取得件数 20件。

Dim index As Integer = 0

'▼最初の20件を取得
Debug.WriteLine($"▼最初の{ro.TableQueryMaxItemCount} 件を取得します。")
Dim results = table.ExecuteQuerySegmented(query, Nothing, ro)

'結果出力
results.ToList().ForEach(Sub(entity)
                             index = index + 1
                             Debug.WriteLine($"{index} {entity.PartitionKey} {entity.RowKey}")
                         End Sub)

'▼次の20件を取得
If results.ContinuationToken IsNot Nothing Then
    Debug.WriteLine($"▼次の{ro.TableQueryMaxItemCount} 件を取得します。")
    results = table.ExecuteQuerySegmented(query, results.ContinuationToken, ro)

    '結果出力
    results.ToList().ForEach(Sub(entity)
                                 index = index + 1
                                 Debug.WriteLine($"{index} {entity.PartitionKey} {entity.RowKey}")
                             End Sub)
End If

'▼その次の20件を取得
If results.ContinuationToken IsNot Nothing Then
    Debug.WriteLine($"▼その次の{ro.TableQueryMaxItemCount} 件を取得します。")
    results = table.ExecuteQuerySegmented(query, results.ContinuationToken, ro)

    '結果出力
    results.ToList().ForEach(Sub(entity)
                                 index = index + 1
                                 Debug.WriteLine($"{index} {entity.PartitionKey} {entity.RowKey}")
                             End Sub)
End If

Debug.WriteLineが表示される場所

 

 

15件ずつ最後まで取得する

前提

  • 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() '検索条件なし。つまり全件を対象とします。
Dim ro As New TableRequestOptions() With { .TableQueryMaxItemCount = 15 } ' 最大取得件数 15件。

'▼15件ずつ取得
Dim index As Integer = 0
Dim token As TableContinuationToken = Nothing

Do
    Debug.WriteLine($"▼{ro.TableQueryMaxItemCount} 件を取得します。")
    Dim results = table.ExecuteQuerySegmented(query, token, ro)

    '結果出力
    results.ToList().ForEach(Sub(entity)
                                 index = index + 1
                                 Debug.WriteLine($"{index} {entity.PartitionKey} {entity.RowKey}")
                             End Sub)

    token = results.ContinuationToken
Loop While (token IsNot Nothing)

Debug.WriteLineが表示される場所

 

 

参考

.NET Standard SDK を使用した Azure Cosmos DB Table API | Microsoft Docs

クイック スタート:.NET での Table API の使用 - Azure Cosmos DB | Microsoft Docs

 


VB6対応 VB6では XMLHttpRequestの機能でREST APIを呼び出すことで、同じことを実現できるかもしれません。