Jak korzystać z usługi Azure Table Storage i interfejsu API tabel usługi Azure Cosmos DB przy użyciu języka C++How to use Azure Table storage and Azure Cosmos DB Table API with C++

Porada

Zawartość tego artykułu dotyczy magazynu tabel Azure i interfejsu API tabeli w usłudze Azure Cosmos DB.The content in this article applies to Azure Table storage and the Azure Cosmos DB Table API. Interfejs API tabeli w usłudze Azure Cosmos DB jest ofertą Premium służącą do przechowywania tabel, która zapewnia tabele zoptymalizowane pod kątem przepływności, ich globalną dystrybucję i automatyczne indeksy pomocnicze.The Azure Cosmos DB Table API is a premium offering for table storage that offers throughput-optimized tables, global distribution, and automatic secondary indexes.

W tym przewodniku przedstawiono typowe scenariusze przy użyciu usługi Azure Table storage service lub interfejsu API tabeli usługi Azure Cosmos DB.This guide shows you common scenarios by using the Azure Table storage service or Azure Cosmos DB Table API. Przykłady są napisane w języku C++ i korzystają z biblioteki klienta usługi Azure Table Storage dla języka C++.The samples are written in C++ and use the Azure Storage Client Library for C++. W tym artykule omówiono następujące scenariusze:This article covers the following scenarios:

  • Tworzenie i usuwanie tabeliCreate and delete a table
  • Praca z encjami tabeliWork with table entities

Uwaga

Ten przewodnik jest przeznaczony do użycia z biblioteką klienta usługi Azure Storage dla języka C++ w wersji 1.0.0 lub wyższej.This guide targets the Azure Storage Client Library for C++ version 1.0.0 and above. Zalecana wersja to Storage Client Library 2.2.0, która jest dostępna za pomocą NuGet lub GitHub.The recommended version is Storage Client Library 2.2.0, which is available by using NuGet or GitHub.

Tworzenie kontCreate accounts

Tworzenie konta usługi AzureCreate an Azure service account

Do pracy z tabelami można używać usługi Azure Table Storage lub Azure Cosmos DB.You can work with tables using Azure Table storage or Azure Cosmos DB. Aby dowiedzieć się więcej o różnicach między usługami, zobacz Oferty tabel .To learn more about the differences between the services, see Table offerings. Aby móc korzystać z wybranej usługi, musisz w niej utworzyć konto.You'll need to create an account for the service you're going to use.

Tworzenie konta usługi Azure StorageCreate an Azure storage account

Najprostszym sposobem utworzenia konta magazynu platformy Azure jest użycie witryny Azure portal.The easiest way to create an Azure storage account is by using the Azure portal. Więcej informacji można znaleźć w temacie Tworzenie konta magazynu.To learn more, see Create a storage account.

Możesz utworzyć konto usługi Azure Storage przy użyciu programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure.You can also create an Azure storage account by using Azure PowerShell or Azure CLI.

Jeśli nie chcesz teraz tworzyć konta magazynu, możesz także użyć emulatora usługi Azure Storage do uruchomienia i testowania kodu w środowisku lokalnym.If you prefer not to create a storage account at this time, you can also use the Azure storage emulator to run and test your code in a local environment. Aby uzyskać więcej informacji, zobacz Używanie emulatora magazynu platformy Azure do tworzenia i testowania.For more information, see Use the Azure storage emulator for development and testing.

Tworzenie konta interfejsu API tabel usługi Azure Cosmos DBCreate an Azure Cosmos DB Table API account

Aby uzyskać instrukcje dotyczące tworzenia konta interfejsu API tabeli usługi Azure Cosmos DB, zobacz Tworzenie konta bazy danych.For instructions on creating an Azure Cosmos DB Table API account, see Create a database account.

Tworzenie aplikacji języka C++Create a C++ application

W tym przewodniku należy użyć funkcji magazynu z aplikacji C++.In this guide, you use storage features from a C++ application. W tym celu należy zainstalować bibliotekę klienta usługi Azure Storage dla języka C++.To do so, install the Azure Storage Client Library for C++.

Aby zainstalować bibliotekę klienta usługi Azure Storage dla języka C++, należy użyć następujących metod:To install the Azure Storage Client Library for C++, use the following methods:

.\vcpkg.exe install azure-storage-cpp

Można znaleźć przewodnik, jak zbudować kod źródłowy i eksportować do Nuget w pliku README.You can find a guide for how to build the source code and export to Nuget in the README file.

Konfigurowanie dostępu do biblioteki klienta usługi Table StorageConfigure access to the Table client library

Aby uzyskać dostęp do tabel za pomocą interfejsów API magazynu platformy Azure, dodaj następujące include instrukcje do górnej części pliku Języka C++:To use the Azure storage APIs to access tables, add the following include statements to the top of the C++ file:

#include <was/storage_account.h>
#include <was/table.h>

W kliencie usługi Azure Storage lub Cosmos DB punkty końcowe i poświadczenia wymagane do uzyskania dostępu do usług zarządzania danymi są przechowywane w parametrach połączenia.An Azure Storage client or Cosmos DB client uses a connection string to store endpoints and credentials to access data management services. Po uruchomieniu aplikacji klienckiej, należy podać parametry połączenia magazynu lub parametry połączenia usługi Azure Cosmos DB w odpowiednim formacie.When you run a client application, you must provide the storage connection string or Azure Cosmos DB connection string in the appropriate format.

Konfigurowanie parametrów połączenia usługi Azure StorageSet up an Azure Storage connection string

W tym przykładzie pokazano, jak zadeklarować statyczne pole do przechowywania ciągu połączenia usługi Azure Storage:This example shows how to declare a static field to hold the Azure Storage connection string:

// Define the Storage connection string with your values.
const utility::string_t storage_connection_string(U("DefaultEndpointsProtocol=https;AccountName=<your_storage_account>;AccountKey=<your_storage_account_key>"));

Użyj nazwy konta Magazynu <your_storage_account>dla .Use the name of your Storage account for <your_storage_account>. Aby <your_storage_account_key>, użyj klucza dostępu dla konta magazynu wymienionego w witrynie Azure portal.For <your_storage_account_key>, use the access key for the Storage account listed in the Azure portal. Aby uzyskać informacje o kontach magazynu i kluczach dostępu, zobacz Tworzenie konta magazynu.For information on Storage accounts and access keys, see Create a storage account.

Konfigurowanie parametrów połączenia usługi Azure Cosmos DBSet up an Azure Cosmos DB connection string

W tym przykładzie pokazano, jak zadeklarować statyczne pole do przechowywania ciągu połączenia usługi Azure Cosmos DB:This example shows how to declare a static field to hold the Azure Cosmos DB connection string:

// Define the Azure Cosmos DB connection string with your values.
const utility::string_t storage_connection_string(U("DefaultEndpointsProtocol=https;AccountName=<your_cosmos_db_account>;AccountKey=<your_cosmos_db_account_key>;TableEndpoint=<your_cosmos_db_endpoint>"));

Użyj nazwy konta usługi Azure Cosmos <your_cosmos_db_account>DB dla .Use the name of your Azure Cosmos DB account for <your_cosmos_db_account>. Wprowadź klucz podstawowy <your_cosmos_db_account_key>dla pliku .Enter your primary key for <your_cosmos_db_account_key>. Wprowadź punkt końcowy wymieniony w <your_cosmos_db_endpoint> witrynie Azure portal dla .Enter the endpoint listed in the Azure portal for <your_cosmos_db_endpoint>.

Aby przetestować aplikację na komputerze lokalnym z systemem Windows, możesz użyć emulatora magazynu platformy Azure, instalowanego w ramach zestawu Azure SDK.To test your application in your local Windows-based computer, you can use the Azure storage emulator that is installed with the Azure SDK. Emulator magazynu to narzędzie umożliwiające symulowanie usług Azure Blob, Queue i Table Storage na lokalnej maszynie deweloperskiej.The storage emulator is a utility that simulates the Azure Blob, Queue, and Table services available on your local development machine. W poniższym przykładzie pokazano, jak zadeklarować pole statyczne do przechowywania ciągu połączenia do emulatora magazynu lokalnego:The following example shows how to declare a static field to hold the connection string to your local storage emulator:

// Define the connection string with Azure storage emulator.
const utility::string_t storage_connection_string(U("UseDevelopmentStorage=true;"));  

Aby uruchomić emulator magazynu platformy Azure, na pulpicie systemu Windows wybierz przycisk Start lub klawisz Windows.To start the Azure storage emulator, from your Windows desktop, select the Start button or the Windows key. Wprowadź i uruchom emulator magazynu microsoft azure.Enter and run Microsoft Azure Storage Emulator. Aby uzyskać więcej informacji, zobacz Używanie emulatora magazynu platformy Azure do tworzenia i testowania.For more information, see Use the Azure storage emulator for development and testing.

Pobieranie parametrów połączeniaRetrieve your connection string

Klasy można cloud_storage_account użyć do reprezentowania informacji o koncie magazynu.You can use the cloud_storage_account class to represent your storage account information. Aby pobrać informacje o koncie magazynu z parse ciągu połączenia magazynu, należy użyć tej metody.To retrieve your storage account information from the storage connection string, use the parse method.

// Retrieve the storage account from the connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);

Następnie uzyskaj odwołanie do cloud_table_client klasy.Next, get a reference to a cloud_table_client class. Ta klasa umożliwia uzyskanie obiektów referencyjnych dla tabel i jednostek przechowywanych w usłudze magazynu tabel.This class lets you get reference objects for tables and entities stored within the Table storage service. Poniższy kod cloud_table_client tworzy obiekt przy użyciu obiektu konta magazynu, który został pobrany wcześniej:The following code creates a cloud_table_client object by using the storage account object you retrieved previously:

// Create the table client.
azure::storage::cloud_table_client table_client = storage_account.create_cloud_table_client();

Tworzenie i dodawanie encji do tabeliCreate and add entities to a table

Tworzenie tabeliCreate a table

Obiekt cloud_table_client umożliwia uzyskanie obiektów odniesienia dla tabel i elementów.A cloud_table_client object lets you get reference objects for tables and entities. Poniższy kod cloud_table_client tworzy obiekt i używa go do utworzenia nowej tabeli.The following code creates a cloud_table_client object and uses it to create a new table.

// Retrieve the storage account from the connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);  

// Create the table client.
azure::storage::cloud_table_client table_client = storage_account.create_cloud_table_client();

// Retrieve a reference to a table.
azure::storage::cloud_table table = table_client.get_table_reference(U("people"));

// Create the table if it doesn't exist.
table.create_if_not_exists();  

Dodawanie jednostki do tabeliAdd an entity to a table

Aby dodać encję do tabeli, utwórz table_entity table_operation::insert_entitynowy obiekt i przekaż go do pliku .To add an entity to a table, create a new table_entity object and pass it to table_operation::insert_entity. W poniższym kodzie imię klienta jest używane jako klucz wiersza, a nazwisko jako klucz partycji.The following code uses the customer's first name as the row key and last name as the partition key. Razem klucz partycji i klucz wiersza jednostki jednoznacznie identyfikują jednostkę w tabeli.Together, an entity's partition and row key uniquely identify the entity in the table. Jednostki z tym samym kluczem partycji można zbadać szybciej niż jednostki z różnymi kluczami partycji.Entities with the same partition key can be queried faster than entities with different partition keys. Korzystanie z różnych kluczy partycji pozwala na większą skalowalność operacji równoległych.Using diverse partition keys allows for greater parallel operation scalability. Aby uzyskać więcej informacji, zobacz temat Microsoft Azure Storage Performance and Scalability Checklist (Lista kontrolna dotycząca wydajności i skalowalności usługi Microsoft Azure Storage).For more information, see Microsoft Azure storage performance and scalability checklist.

Poniższy kod tworzy nowe table_entity wystąpienie z niektórych danych klienta do przechowywania.The following code creates a new instance of table_entity with some customer data to store. Kod następnie table_operation::insert_entity wywołuje utworzenie table_operation obiektu, aby wstawić jednostkę do tabeli i kojarzy z nią nową encję tabeli.The code next calls table_operation::insert_entity to create a table_operation object to insert an entity into a table, and associates the new table entity with it. Na koniec kod wywołuje execute metodę cloud_table na obiekcie.Finally, the code calls the execute method on the cloud_table object. Nowy table_operation wysyła żądanie do usługi Tabela, aby wstawić nową jednostkę people klienta do tabeli.The new table_operation sends a request to the Table service to insert the new customer entity into the people table.

// Retrieve the storage account from the connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);

// Create the table client.
azure::storage::cloud_table_client table_client = storage_account.create_cloud_table_client();

// Retrieve a reference to a table.
azure::storage::cloud_table table = table_client.get_table_reference(U("people"));

// Create the table if it doesn't exist.
table.create_if_not_exists();

// Create a new customer entity.
azure::storage::table_entity customer1(U("Harp"), U("Walter"));

azure::storage::table_entity::properties_type& properties = customer1.properties();
properties.reserve(2);
properties[U("Email")] = azure::storage::entity_property(U("Walter@contoso.com"));

properties[U("Phone")] = azure::storage::entity_property(U("425-555-0101"));

// Create the table operation that inserts the customer entity.
azure::storage::table_operation insert_operation = azure::storage::table_operation::insert_entity(customer1);

// Execute the insert operation.
azure::storage::table_result insert_result = table.execute(insert_operation);

Zbiorcze wstawianie jednostekInsert a batch of entities

Możesz wstawić partię jednostek do usługi tabel w ramach jednej operacji zapisu.You can insert a batch of entities to the Table service in one write operation. Poniższy kod table_batch_operation tworzy obiekt, a następnie dodaje trzy operacje wstawania do niego.The following code creates a table_batch_operation object, and then adds three insert operations to it. Każda operacja wstawiania jest dodawana przez utworzenie nowego obiektu insert encji, ustawienie jego wartości, a następnie wywołanie metody na table_batch_operation obiekcie, aby skojarzyć encję z nową operacją wstawiania.Each insert operation is added by creating a new entity object, setting its values, and then calling the insert method on the table_batch_operation object to associate the entity with a new insert operation. Następnie wywołano cloud_table.execute wywołanie kodu, aby uruchomić operację.Then, the code calls cloud_table.execute to run the operation.

// Retrieve the storage account from the connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);

// Create the table client.
azure::storage::cloud_table_client table_client = storage_account.create_cloud_table_client();

// Create a cloud table object for the table.
azure::storage::cloud_table table = table_client.get_table_reference(U("people"));

// Define a batch operation.
azure::storage::table_batch_operation batch_operation;

// Create a customer entity and add it to the table.
azure::storage::table_entity customer1(U("Smith"), U("Jeff"));

azure::storage::table_entity::properties_type& properties1 = customer1.properties();
properties1.reserve(2);
properties1[U("Email")] = azure::storage::entity_property(U("Jeff@contoso.com"));
properties1[U("Phone")] = azure::storage::entity_property(U("425-555-0104"));

// Create another customer entity and add it to the table.
azure::storage::table_entity customer2(U("Smith"), U("Ben"));

azure::storage::table_entity::properties_type& properties2 = customer2.properties();
properties2.reserve(2);
properties2[U("Email")] = azure::storage::entity_property(U("Ben@contoso.com"));
properties2[U("Phone")] = azure::storage::entity_property(U("425-555-0102"));

// Create a third customer entity to add to the table.
azure::storage::table_entity customer3(U("Smith"), U("Denise"));

azure::storage::table_entity::properties_type& properties3 = customer3.properties();
properties3.reserve(2);
properties3[U("Email")] = azure::storage::entity_property(U("Denise@contoso.com"));
properties3[U("Phone")] = azure::storage::entity_property(U("425-555-0103"));

// Add customer entities to the batch insert operation.
batch_operation.insert_or_replace_entity(customer1);
batch_operation.insert_or_replace_entity(customer2);
batch_operation.insert_or_replace_entity(customer3);

// Execute the batch operation.
std::vector<azure::storage::table_result> results = table.execute_batch(batch_operation);

Kilka uwag dotyczących operacji zbiorczych:Some things to note on batch operations:

  • insertMożna wykonać maksymalnie 100 delete merge, replace insert-or-merge, insert-or-replace , i operacji w dowolnej kombinacji w jednej partii.You can do up to 100 insert, delete, merge, replace, insert-or-merge, and insert-or-replace operations in any combination in a single batch.
  • Operacja wsadowa może mieć operację pobierania, jeśli jest to jedyna operacja w partii.A batch operation can have a retrieve operation, if it's the only operation in the batch.
  • Wszystkie jednostki w jednej operacji zbiorczej muszą mieć ten sam klucz partycji.All entities in a single batch operation must have the same partition key.
  • Maksymalny rozmiar ładunku danych operacji zbiorczej to 4 MB.A batch operation is limited to a 4-MB data payload.

Kwerenda i modyfikowanie encjiQuery and modify entities

Pobieranie wszystkich jednostek w partycjiRetrieve all entities in a partition

Aby zbadać tabelę dla wszystkich jednostek table_query na partycji, użyj obiektu.To query a table for all entities in a partition, use a table_query object. Poniższy przykład kodu określa filtr dla Smith jednostek, gdzie jest klucz partycji.The following code example specifies a filter for entities where Smith is the partition key. W tym przykładzie drukowane są pola każdej jednostki w wynikach zapytania w konsoli.This example prints the fields of each entity in the query results to the console.

Uwaga

Te metody języka C++ nie są obecnie obsługiwane w przypadku usługi Azure Cosmos DB.These methods are not currently supported for C++ in Azure Cosmos DB.

// Retrieve the storage account from the connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);

// Create the table client.
azure::storage::cloud_table_client table_client = storage_account.create_cloud_table_client();

// Create a cloud table object for the table.
azure::storage::cloud_table table = table_client.get_table_reference(U("people"));

// Construct the query operation for all customer entities where PartitionKey="Smith".
azure::storage::table_query query;

query.set_filter_string(azure::storage::table_query::generate_filter_condition(U("PartitionKey"), azure::storage::query_comparison_operator::equal, U("Smith")));

// Execute the query.
azure::storage::table_query_iterator it = table.execute_query(query);

// Print the fields for each customer.
azure::storage::table_query_iterator end_of_results;
for (; it != end_of_results; ++it)
{
    const azure::storage::table_entity::properties_type& properties = it->properties();

    std::wcout << U("PartitionKey: ") << it->partition_key() << U(", RowKey: ") << it->row_key()
        << U(", Property1: ") << properties.at(U("Email")).string_value()
        << U(", Property2: ") << properties.at(U("Phone")).string_value() << std::endl;
}  

Kwerenda w tym przykładzie zwraca wszystkie jednostki, które odpowiadają kryteriom filtru.The query in this example returns all the entities that match the filter criteria. Jeśli masz duże tabele i często pobierasz jednostki z tabel, zalecamy zamiast tego przechowywanie danych w obiektach blob w usłudze Azure Storage.If you have large tables and need to download the table entities often, we recommend that you store your data in Azure storage blobs instead.

Pobieranie zakresu jednostek w partycjiRetrieve a range of entities in a partition

Jeśli nie chcesz wysyłać zapytań o wszystkie jednostki na partycji, możesz określić zakres.If you don't want to query all the entities in a partition, you can specify a range. Połącz filtr klucza partycji z filtrem klucza wiersza.Combine the partition key filter with a row key filter. Poniższy przykład kodu używa dwóch filtrów, aby Smith uzyskać wszystkie jednostki w partycji, gdzie E klucz wiersza (imię) rozpoczyna się literą wcześniej niż w alfabecie, a następnie drukuje wyniki kwerendy.The following code example uses two filters to get all entities in partition Smith where the row key (first name) starts with a letter earlier than E in the alphabet, and then prints the query results.

Uwaga

Te metody języka C++ nie są obecnie obsługiwane w przypadku usługi Azure Cosmos DB.These methods are not currently supported for C++ in Azure Cosmos DB.

// Retrieve the storage account from the connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);

// Create the table client.
azure::storage::cloud_table_client table_client = storage_account.create_cloud_table_client();

// Create a cloud table object for the table.
azure::storage::cloud_table table = table_client.get_table_reference(U("people"));

// Create the table query.
azure::storage::table_query query;

query.set_filter_string(azure::storage::table_query::combine_filter_conditions(
    azure::storage::table_query::generate_filter_condition(U("PartitionKey"),
    azure::storage::query_comparison_operator::equal, U("Smith")),
    azure::storage::query_logical_operator::op_and,
    azure::storage::table_query::generate_filter_condition(U("RowKey"), azure::storage::query_comparison_operator::less_than, U("E"))));

// Execute the query.
azure::storage::table_query_iterator it = table.execute_query(query);

// Loop through the results, displaying information about the entity.
azure::storage::table_query_iterator end_of_results;
for (; it != end_of_results; ++it)
{
    const azure::storage::table_entity::properties_type& properties = it->properties();

    std::wcout << U("PartitionKey: ") << it->partition_key() << U(", RowKey: ") << it->row_key()
        << U(", Property1: ") << properties.at(U("Email")).string_value()
        << U(", Property2: ") << properties.at(U("Phone")).string_value() << std::endl;
}  

Pobieranie pojedynczej jednostkiRetrieve a single entity

Można napisać zapytanie do pobrania jednej, określonej jednostki.You can write a query to retrieve a single, specific entity. Poniższy kod table_operation::retrieve_entity służy do Jeff Smithokreślenia odbiorcy .The following code uses table_operation::retrieve_entity to specify the customer Jeff Smith. Ta metoda zwraca tylko jedną jednostkę, a nie table_resultkolekcję, a zwrócona wartość znajduje się w .This method returns just one entity, rather than a collection, and the returned value is in table_result. Określenie kluczy partycji i wiersza w pojedynczym zapytaniu jest najszybszym sposobem na pobranie jednej jednostki z usługi tabel.Specifying both partition and row keys in a query is the fastest way to retrieve a single entity from the Table service.

azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);

// Create the table client.
azure::storage::cloud_table_client table_client = storage_account.create_cloud_table_client();

// Create a cloud table object for the table.
azure::storage::cloud_table table = table_client.get_table_reference(U("people"));

// Retrieve the entity with partition key of "Smith" and row key of "Jeff".
azure::storage::table_operation retrieve_operation = azure::storage::table_operation::retrieve_entity(U("Smith"), U("Jeff"));
azure::storage::table_result retrieve_result = table.execute(retrieve_operation);

// Output the entity.
azure::storage::table_entity entity = retrieve_result.entity();
const azure::storage::table_entity::properties_type& properties = entity.properties();

std::wcout << U("PartitionKey: ") << entity.partition_key() << U(", RowKey: ") << entity.row_key()
    << U(", Property1: ") << properties.at(U("Email")).string_value()
    << U(", Property2: ") << properties.at(U("Phone")).string_value() << std::endl;

Zastępowanie jednostkiReplace an entity

Aby zastąpić jednostkę, pobierz ją z usługi Table Storage, zmodyfikuj obiekt jednostki, a następnie zapisz zmiany w usłudze Table Storage.To replace an entity, retrieve it from the Table service, modify the entity object, and then save the changes back to the Table service. Poniższy kod zmienia numer telefonu i adres e-mail istniejącego klienta.The following code changes an existing customer's phone number and email address. Zamiast wywoływania, table_operation::insert_entityten kod table_operation::replace_entityużywa .Instead of calling table_operation::insert_entity, this code uses table_operation::replace_entity. Takie podejście powoduje, że jednostka ma być w pełni zastąpiona na serwerze, chyba że jednostka na serwerze uległa zmianie od czasu jej pobrania.This approach causes the entity to be fully replaced on the server, unless the entity on the server has changed since it was retrieved. Jeśli została zmieniona, operacja zakończy się niepowodzeniem.If it has been changed, the operation fails. Ten błąd uniemożliwia aplikacji zastąpienie zmiany wprowadzonej między pobieraniem i aktualizacją przez inny składnik.This failure prevents your application from overwriting a change made between the retrieval and update by another component. Prawidłową obsługą tego błędu jest ponowne pobranie jednostki, wprowadzenie zmian, jeśli table_operation::replace_entity nadal jest prawidłowe, a następnie wykonaj inną operację.The proper handling of this failure is to retrieve the entity again, make your changes, if still valid, and then do another table_operation::replace_entity operation.

// Retrieve the storage account from the connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);

// Create the table client.
azure::storage::cloud_table_client table_client = storage_account.create_cloud_table_client();

// Create a cloud table object for the table.
azure::storage::cloud_table table = table_client.get_table_reference(U("people"));

// Replace an entity.
azure::storage::table_entity entity_to_replace(U("Smith"), U("Jeff"));
azure::storage::table_entity::properties_type& properties_to_replace = entity_to_replace.properties();
properties_to_replace.reserve(2);

// Specify a new phone number.
properties_to_replace[U("Phone")] = azure::storage::entity_property(U("425-555-0106"));

// Specify a new email address.
properties_to_replace[U("Email")] = azure::storage::entity_property(U("JeffS@contoso.com"));

// Create an operation to replace the entity.
azure::storage::table_operation replace_operation = azure::storage::table_operation::replace_entity(entity_to_replace);

// Submit the operation to the Table service.
azure::storage::table_result replace_result = table.execute(replace_operation);

Wstawianie lub zastępowanie elementuInsert or replace an entity

table_operation::replace_entityoperacje nie powiodą się, jeśli jednostka została zmieniona, ponieważ została pobrana z serwera.table_operation::replace_entity operations fail if the entity has been changed since it was retrieved from the server. Ponadto należy najpierw pobrać jednostkę z serwera, table_operation::replace_entity aby odnieść sukces.Furthermore, you must retrieve the entity from the server first in order for table_operation::replace_entity to be successful. Czasami nie wiadomo, czy jednostka istnieje na serwerze.Sometimes, you don't know if the entity exists on the server. Bieżące wartości przechowywane w nim są nieistotne, ponieważ aktualizacja powinna zastąpić je wszystkie.The current values stored in it are irrelevant, because your update should overwrite them all. Aby osiągnąć ten wynik, należy użyć table_operation::insert_or_replace_entity operacji.To accomplish this result, use a table_operation::insert_or_replace_entity operation. Ta operacja wstawia jednostkę, jeśli nie istnieje.This operation inserts the entity if it doesn't exist. Operacja zastępuje jednostkę, jeśli istnieje.The operation replaces the entity if it exists. W poniższym przykładzie kodu Jeff Smith encja klienta jest nadal pobierana, ale jest table_operation::insert_or_replace_entitynastępnie zapisywana z powrotem na serwerze przy użyciu programu .In the following code example, the customer entity for Jeff Smith is still retrieved, but it's then saved back to the server by using table_operation::insert_or_replace_entity. Wszelkie aktualizacje wprowadzone w jednostce między operacjami pobrania i aktualizacji zostaną zastąpione.Any updates made to the entity between the retrieval and update operation will be overwritten.

// Retrieve the storage account from the connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);

// Create the table client.
azure::storage::cloud_table_client table_client = storage_account.create_cloud_table_client();

// Create a cloud table object for the table.
azure::storage::cloud_table table = table_client.get_table_reference(U("people"));

// Insert or replace an entity.
azure::storage::table_entity entity_to_insert_or_replace(U("Smith"), U("Jeff"));
azure::storage::table_entity::properties_type& properties_to_insert_or_replace = entity_to_insert_or_replace.properties();

properties_to_insert_or_replace.reserve(2);

// Specify a phone number.
properties_to_insert_or_replace[U("Phone")] = azure::storage::entity_property(U("425-555-0107"));

// Specify an email address.
properties_to_insert_or_replace[U("Email")] = azure::storage::entity_property(U("Jeffsm@contoso.com"));

// Create an operation to insert or replace the entity.
azure::storage::table_operation insert_or_replace_operation = azure::storage::table_operation::insert_or_replace_entity(entity_to_insert_or_replace);

// Submit the operation to the Table service.
azure::storage::table_result insert_or_replace_result = table.execute(insert_or_replace_operation);

Tworzenie zapytania do podzbioru właściwości jednostkiQuery a subset of entity properties

Za pomocą zapytania wykonywanego względem tabeli można pobrać tylko kilka właściwości z jednostki.A query to a table can retrieve just a few properties from an entity. Kwerenda w poniższym kodzie używa table_query::set_select_columns metody do zwracania tylko adresów e-mail jednostek w tabeli.The query in the following code uses the table_query::set_select_columns method to return only the email addresses of entities in the table.

// Retrieve the storage account from the connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);

// Create the table client.
azure::storage::cloud_table_client table_client = storage_account.create_cloud_table_client();

// Create a cloud table object for the table.
azure::storage::cloud_table table = table_client.get_table_reference(U("people"));

// Define the query, and select only the Email property.
azure::storage::table_query query;
std::vector<utility::string_t> columns;

columns.push_back(U("Email"));
query.set_select_columns(columns);

// Execute the query.
azure::storage::table_query_iterator it = table.execute_query(query);

// Display the results.
azure::storage::table_query_iterator end_of_results;
for (; it != end_of_results; ++it)
{
    std::wcout << U("PartitionKey: ") << it->partition_key() << U(", RowKey: ") << it->row_key();

    const azure::storage::table_entity::properties_type& properties = it->properties();
    for (auto prop_it = properties.begin(); prop_it != properties.end(); ++prop_it)
    {
        std::wcout << ", " << prop_it->first << ": " << prop_it->second.str();
    }

    std::wcout << std::endl;
}

Uwaga

Pobieranie wybranych właściwości z jednostki za pomocą zapytania będzie bardziej wydajne niż pobieranie wszystkich właściwości.Querying a few properties from an entity is a more efficient operation than retrieving all properties.

Usuwanie zawartościDelete content

Usuwanie jednostkiDelete an entity

Encję można usunąć po jej pobraniu.You can delete an entity after you retrieve it. Po pobraniu encji, wywołać table_operation::delete_entity z jednostką, aby usunąć.After you retrieve an entity, call table_operation::delete_entity with the entity to delete. Następnie wywołaj cloud_table.execute metodę.Then call the cloud_table.execute method. Poniższy kod pobiera i usuwa jednostkę z Smith kluczem partycji i kluczem wiersza Jeff.The following code retrieves and deletes an entity with a partition key of Smith and a row key of Jeff.

// Retrieve the storage account from the connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);

// Create the table client.
azure::storage::cloud_table_client table_client = storage_account.create_cloud_table_client();

// Create a cloud table object for the table.
azure::storage::cloud_table table = table_client.get_table_reference(U("people"));

// Create an operation to retrieve the entity with partition key of "Smith" and row key of "Jeff".
azure::storage::table_operation retrieve_operation = azure::storage::table_operation::retrieve_entity(U("Smith"), U("Jeff"));
azure::storage::table_result retrieve_result = table.execute(retrieve_operation);

// Create an operation to delete the entity.
azure::storage::table_operation delete_operation = azure::storage::table_operation::delete_entity(retrieve_result.entity());

// Submit the delete operation to the Table service.
azure::storage::table_result delete_result = table.execute(delete_operation);  

Usuwanie tabeliDelete a table

Poniższy przykład kodu usuwa tabelę z konta magazynu.Finally, the following code example deletes a table from a storage account. Tabela, która została usunięta, jest niedostępna do ponownego utworzenia przez pewien czas po usunięciu.A table that has been deleted is unavailable to be re-created for some time following the deletion.

// Retrieve the storage account from the connection string.
azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(storage_connection_string);

// Create the table client.
azure::storage::cloud_table_client table_client = storage_account.create_cloud_table_client();

// Create a cloud table object for the table.
azure::storage::cloud_table table = table_client.get_table_reference(U("people"));

// Delete the table if it exists
if (table.delete_table_if_exists())
{
    std::cout << "Table deleted!";
}
else
{
    std::cout << "Table didn't exist";
}

Rozwiązywanie problemówTroubleshooting

W programie Visual Studio Community Edition, jeśli projekt pobiera błędy kompilacji z powodu plików dołączanych storage_account.h i table.h, usuń przełącznik kompilatora /permissive:For Visual Studio Community Edition, if your project gets build errors because of the include files storage_account.h and table.h, remove the /permissive- compiler switch:

  1. Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i wybierz pozycję Właściwości.In Solution Explorer, right-click your project and select Properties.
  2. W oknie dialogowym Strony właściwości rozwiń węzeł Właściwości konfiguracji, rozwiń węzeł C/C++, a następnie wybierz pozycję Język.In the Property Pages dialog box, expand Configuration Properties, expand C/C++, and select Language.
  3. Zmień ustawienie Tryb zgodności na Nie.Set Conformance mode to No.

Następne krokiNext steps

Microsoft Azure Storage Explorer jest bezpłatną aplikacją autonomiczną oferowaną przez firmę Microsoft, która umożliwia wizualną pracę z danymi w usłudze Azure Storage w systemach Windows, macOS i Linux.Microsoft Azure Storage Explorer is a free, standalone app from Microsoft that enables you to work visually with Azure Storage data on Windows, macOS, and Linux.

Skorzystaj z poniższych linków, aby dowiedzieć się więcej na temat usługi Azure Storage i interfejsu API tabel usługi Azure Cosmos DB:Follow these links to learn more about Azure Storage and the Table API in Azure Cosmos DB: