Visual Basic サンプル集 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 > Azure > Cosmos DB
テーブルAPI でエンティティを削除する
2021/6/6
この記事は Azure Cosmos DB テーブル API を対象にしています。
エンティティを1つ削除する
前提
- 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")
'▼削除するエンティティを生成
'PartitionKey=徳川、RowKey=綱吉のエンティティを削除対象とします。
Dim entity As New DynamicTableEntity()
entity.PartitionKey = "徳川"
entity.RowKey = "綱吉"
entity.ETag = "*" '更新状況によらない無条件での削除を設定します。
'▼削除操作を実行
Dim deleteOperation As TableOperation = TableOperation.Delete(entity)
Dim result As TableResult = table.Execute(deleteOperation)
'非同期版もあります。
'Dim result As TableResult = Await table.ExecuteAsync(deleteOperation)
'▼結果
'この操作で消費された要求ユニット(RU)の使用量を出力します。
If result.RequestCharge.HasValue Then
Debug.WriteLine("要求ユニット使用量: " & result.RequestCharge) ' 8.57
End If
メモ:DynamicTableEntityの代わりに、TableEntityを継承した独自のクラスを使用することもできます。
メモ:取得したエンティティを削除する場合、取得後にエンティティが変更されていても削除するのであれば ETag を "*" に設定してから削除を実行します。
複数のエンティティを一度に削除する
例外が発生した場合、すべての削除が失敗します。
前提
- 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")
'▼削除操作を実行
'ETag に * 以外の値を設定すると ETag が一致した場合のみ削除を実行します。無条件で削除する場合は * を指定します。
Dim batch As New TableBatchOperation()
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家康", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "秀忠", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家光", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家綱", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "綱吉", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家宣", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家継", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "吉宗", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家重", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家治", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家斉", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家慶", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家定", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家茂", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "慶喜", .ETag = "*"}))
Dim result As TableBatchResult = table.ExecuteBatch(batch)
'非同期版もあります。
'Dim result As TableBatchResult = Await table.ExecuteBatchAsync(batch)
'▼結果
'この操作で消費された要求ユニット(RU)の使用量を出力します。
If result.RequestCharge.HasValue Then
Debug.WriteLine("要求ユニット使用量: " & result.RequestCharge) ' 125.15
End If
メモ:DynamicTableEntityの代わりに、TableEntityを継承した独自のクラスを使用することもできます。
メモ:最大で100個のエンティティを一度に削除できます。通信量(ペイロード)は4MiBに制限されます。
テーブル内のすべてのエンティティを削除する
前提
- 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()
For Each entity In table.ExecuteQuery(query)
table.Execute(TableOperation.Delete(entity))
Next
メモ:すべてのエンティティを削除する場合は、テーブルをまるごと削除した方が効率的かもしれません。
メモ:このサンプルは、テーブルから全件取得して1件ずつ削除していくものです。取得後に変更・追加されたエンティティは削除されません。
参考
.NET Standard SDK を使用した Azure Cosmos DB Table API | Microsoft Docs
クイック スタート:.NET での Table API の使用 - Azure Cosmos DB | Microsoft Docs
VB6では
XMLHttpRequestの機能でREST APIを呼び出すことで、同じことを実現できるかもしれません。