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

テーブルAPI でエンティティを1つ挿入する

2021/5/23

→ 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")

'▼追加するエンティティを生成
'この例ではエンティティは 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

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プロパティを直接使用する方法もあります。

メモ:Nothingがあり得る構造体の型には ? を付けておきます。

 

 

エンティティが存在しなければ挿入し、存在すればマージで更新する

この例では、同じキーのエンティティが存在しなければ挿入、存在すればマージで更新します。マージとは、値が指定された項目は置き換え、(Nothingなどで)値が指定されていない項目は何も更新しない操作です。

前提

  • 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")

'▼追加するエンティティを生成
'この例ではエンティティは 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

Debug.WriteLineが表示される場所

メモ:エンティティを挿入する例から続けて実行すると、birthDay は そのままで Note は「幼名は竹千代」に更新されます。

メモ:この例で使用している PersonEntity は 上述の例 と同じです。

 

 

エンティティが存在しなければ挿入し、存在すれば置換で更新する

この例では、同じキーのエンティティが存在しなければ挿入、存在すれば置換で更新します。置換とは、存在するエンティティをまるごと新しいエンティティに置き換える操作です。

前提

  • 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")

'▼追加するエンティティを生成
'この例ではエンティティは 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

Debug.WriteLineが表示される場所

メモ:エンティティを挿入する例から続けて実行すると、birthDay は 項目自体がなくなり、Note は「関ヶ原の戦いで勝利」に更新されます。

メモ:この例で使用している PersonEntity は 上述の例 と同じです。

 

 

エンティティ用のクラスを定義せずに、エンティティを挿入する

この例では、エンティティを挿入します。同じキーのエンティティが既に存在する場合例外が発生します。

前述の例と異なり、エンティティを表すクラスを別途定義する必要はありません。

前提

  • 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 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

Debug.WriteLineが表示される場所

実行すると次のようなエンティティが挿入されます。

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