Visual Basic サンプル集 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 > Azure > Cosmos DB
テーブルAPI でエンティティを1つ挿入する
2021/5/23
この記事は 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")
'▼追加するエンティティを生成
'この例ではエンティティは PersonEntity クラスとしてあらかじめ定義されています。
Dim entity As New PersonEntity() With
{
.firstName = "家康",
.lastName = "徳川",
.birthDay = TimeZoneInfo.ConvertTimeFromUtc(New DateTime(1843,1,31),TimeZoneInfo.Local),
.note = "江戸幕府の初代将軍"
}
'▼追加操作を実行
Dim insertOperation As TableOperation = TableOperation.Insert(entity)
Dim result As TableResult = table.Execute(insertOperation)
'非同期版もあります。
'Dim result As TableResult = Await table.ExecuteAsync(insertOperation)
'▼結果
'この操作で消費された要求ユニット(RU)の使用量を出力します。
If result.RequestCharge.HasValue Then
Debug.WriteLine("要求ユニット使用量: " & result.RequestCharge) ' 8.57
End If
この例で使用している 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プロパティを直接使用する方法もあります。
メモ:Nothingがあり得る構造体の型には ? を付けておきます。
エンティティが存在しなければ挿入し、存在すればマージで更新する
この例では、同じキーのエンティティが存在しなければ挿入、存在すればマージで更新します。マージとは、値が指定された項目は置き換え、(Nothingなどで)値が指定されていない項目は何も更新しない操作です。
前提
- 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")
'▼追加するエンティティを生成
'この例ではエンティティは PersonEntity クラスとしてあらかじめ定義されています。
Dim entity As New PersonEntity() With
{
.firstName = "家康",
.lastName = "徳川",
.note = "幼名は竹千代"
}
'▼追加操作を実行
Dim insertOrMergeOperation As TableOperation = TableOperation.InsertOrMerge(entity)
Dim result As TableResult = table.Execute(insertOrMergeOperation)
'非同期版もあります。
'Dim result As TableResult = Await table.ExecuteAsync(insertOrMergeOperation)
'▼結果
'この操作で消費された要求ユニット(RU)の使用量を出力します。
If result.RequestCharge.HasValue Then
Debug.WriteLine("要求ユニット使用量: " & result.RequestCharge) '10前後
End If
メモ:エンティティを挿入する例から続けて実行すると、birthDay は そのままで Note は「幼名は竹千代」に更新されます。
メモ:この例で使用している PersonEntity は 上述の例 と同じです。
エンティティが存在しなければ挿入し、存在すれば置換で更新する
この例では、同じキーのエンティティが存在しなければ挿入、存在すれば置換で更新します。置換とは、存在するエンティティをまるごと新しいエンティティに置き換える操作です。
前提
- 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")
'▼追加するエンティティを生成
'この例ではエンティティは PersonEntity クラスとしてあらかじめ定義されています。
Dim entity As New PersonEntity() With
{
.firstName = "家康",
.lastName = "徳川",
.note = "関ヶ原の戦いで勝利"
}
'▼追加操作を実行
Dim insertOrReplaceOperation As TableOperation = TableOperation.InsertOrReplace(entity)
Dim result As TableResult = table.Execute(insertOrReplaceOperation)
'非同期版もあります。
'Dim result As TableResult = Await table.ExecuteAsync(insertOrReplaceOperation)
'▼結果
'この操作で消費された要求ユニット(RU)の使用量を出力します。
If result.RequestCharge.HasValue Then
Debug.WriteLine("要求ユニット使用量: " & result.RequestCharge) '10前後
End If
メモ:エンティティを挿入する例から続けて実行すると、birthDay は 項目自体がなくなり、Note は「関ヶ原の戦いで勝利」に更新されます。
メモ:この例で使用している PersonEntity は 上述の例 と同じです。
エンティティ用のクラスを定義せずに、エンティティを挿入する
この例では、エンティティを挿入します。同じキーのエンティティが既に存在する場合例外が発生します。
前述の例と異なり、エンティティを表すクラスを別途定義する必要はありません。
前提
- 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 entity As New DynamicTableEntity("織田", "信長")
entity.Properties.Add("birthPlace", EntityProperty.GeneratePropertyForString("尾張"))
entity.Properties.Add("isTenkabito", EntityProperty.GeneratePropertyForBool(True))
entity.Properties.Add("pictures", EntityProperty.GeneratePropertyForInt(23))
'▼追加操作を実行
Dim insertOperation As TableOperation = TableOperation.Insert(entity)
Dim result As TableResult = table.Execute(insertOperation)
'非同期版もあります。
'Dim result As TableResult = Await table.ExecuteAsync(insertOperation)
'▼結果
'この操作で消費された要求ユニット(RU)の使用量を出力します。
If result.RequestCharge.HasValue Then
Debug.WriteLine("要求ユニット使用量: " & result.RequestCharge) ' 9.52
End If
実行すると次のようなエンティティが挿入されます。
PartitionKey | RowKey | Timestamp | birthPlace | isTenkabito | pictures |
織田 | 信長 | Mon, 03 May 2021 06:13:09 GMT | 尾張 | true | 23 |
参考
.NET Standard SDK を使用した Azure Cosmos DB Table API | Microsoft Docs
クイック スタート:.NET での Table API の使用 - Azure Cosmos DB | Microsoft Docs
VB6では
XMLHttpRequestの機能でREST APIを呼び出すことで、同じことを実現できるかもしれません。