Sample code for 30+ languages & platforms
C

Azure Table Insert Entity

See more Azure Table Service Examples

Insert an entity into an Azure table.

Chilkat C Downloads

C
#include <C_CkRest.h>
#include <C_CkAuthAzureStorage.h>
#include <C_CkJsonObject.h>
#include <C_CkStringBuilder.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkRest rest;
    BOOL bTls;
    int port;
    BOOL bAutoReconnect;
    HCkAuthAzureStorage azAuth;
    HCkJsonObject json;
    HCkStringBuilder sbRequestBody;
    HCkStringBuilder sbResponseBody;
    int respStatusCode;

    success = FALSE;

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    rest = CkRest_Create();

    // IMPORTANT: Make sure to change "myaccount" to your actual Azure Storage Account name.
    // IMPORTANT: Also change "mytable" to the name of your Azure table.
    // We're going to POST to this URL:  https://myaccount.table.core.windows.net/mytable
    bTls = TRUE;
    port = 443;
    bAutoReconnect = TRUE;
    success = CkRest_Connect(rest,"myaccount.table.core.windows.net",port,bTls,bAutoReconnect);
    if (success != TRUE) {
        printf("ConnectFailReason: %d\n",CkRest_getConnectFailReason(rest));
        printf("%s\n",CkRest_lastErrorText(rest));
        CkRest_Dispose(rest);
        return;
    }

    // Provide Azure Cloud credentials for the REST call.
    azAuth = CkAuthAzureStorage_Create();
    CkAuthAzureStorage_putAccessKey(azAuth,"AZURE_ACCESS_KEY");
    // The account name used here should match the 1st part of the domain passed in the call to Connect (above).
    CkAuthAzureStorage_putAccount(azAuth,"myaccount");
    CkAuthAzureStorage_putScheme(azAuth,"SharedKey");
    CkAuthAzureStorage_putService(azAuth,"Table");

    // This causes the "x-ms-version: 2019-07-07" header to be automatically added.
    CkAuthAzureStorage_putXMsVersion(azAuth,"2019-07-07");
    success = CkRest_SetAuthAzureStorage(rest,azAuth);

    // Note: The application does not need to explicitly set the following
    // headers: Content-Length, x-ms-date, Authorization.  These headers
    // are automatically set by Chilkat.

    // Note: The above code does not need to be repeatedly called for each REST request.
    // The rest object can be setup once, and then many requests can be sent.  Chilkat will automatically
    // reconnect within a FullRequest* method as needed.  It is only the very first connection that is explicitly
    // made via the Connect method.

    // Use this online tool to generate code from sample JSON:
    // Generate Code to Create JSON

    // The following JSON is sent in the request body.

    // {  
    //    "PartitionKey":"mypartitionkey",  
    //    "RowKey":"myrowkey",  
    //    "Timestamp":"2013-08-22T01:12:06.2608595Z",  
    //    "Address":"Mountain View",  
    //    "Age":23,  
    //    "AmountDue":200.23,  
    //    "CustomerCode":"c9da6455-213d-42c9-9a79-3e9149a57833",  
    //    "CustomerSince":"2008-07-10T00:00:00",  
    //    "IsActive":true,  
    //    "NumberOfOrders":"255"  
    // }  

    json = CkJsonObject_Create();
    CkJsonObject_UpdateString(json,"PartitionKey","mypartitionkey");
    CkJsonObject_UpdateString(json,"RowKey","myrowkey");
    CkJsonObject_UpdateString(json,"Timestamp","2013-08-22T01:12:06.2608595Z");
    CkJsonObject_UpdateString(json,"Address","Mountain View");
    CkJsonObject_UpdateInt(json,"Age",23);
    CkJsonObject_UpdateNumber(json,"AmountDue","200.23");
    CkJsonObject_UpdateString(json,"CustomerCode","c9da6455-213d-42c9-9a79-3e9149a57833");
    CkJsonObject_UpdateString(json,"CustomerSince","2008-07-10T00:00:00");
    CkJsonObject_UpdateBool(json,"IsActive",TRUE);
    CkJsonObject_UpdateString(json,"NumberOfOrders","255");

    // IMPORTANT: Pay attention to the options for nometadata, minimalmetadata, or fullmetadata.
    // See the Azure table service API documentation at https://docs.microsoft.com/en-us/rest/api/storageservices/insert-entity
    CkRest_AddHeader(rest,"Accept","application/json;odata=nometadata");
    CkRest_AddHeader(rest,"Prefer","return-no-content");
    CkRest_AddHeader(rest,"Content-Type","application/json");

    sbRequestBody = CkStringBuilder_Create();
    CkJsonObject_EmitSb(json,sbRequestBody);
    sbResponseBody = CkStringBuilder_Create();
    // IMPORTANT: Change "mytable" to the name of your actual table.
    success = CkRest_FullRequestSb(rest,"POST","/mytable",sbRequestBody,sbResponseBody);
    if (success != TRUE) {
        printf("%s\n",CkRest_lastErrorText(rest));
        CkRest_Dispose(rest);
        CkAuthAzureStorage_Dispose(azAuth);
        CkJsonObject_Dispose(json);
        CkStringBuilder_Dispose(sbRequestBody);
        CkStringBuilder_Dispose(sbResponseBody);
        return;
    }

    // A status code of 204 is a success response for the case where Prefer=return-no-content.
    respStatusCode = CkRest_getResponseStatusCode(rest);
    printf("Response Status Code = %d\n",respStatusCode);
    if (respStatusCode >= 400) {
        printf("Response Header:\n");
        printf("%s\n",CkRest_responseHeader(rest));
        printf("Response Body:\n");
        printf("%s\n",CkStringBuilder_getAsString(sbResponseBody));
        CkRest_Dispose(rest);
        CkAuthAzureStorage_Dispose(azAuth);
        CkJsonObject_Dispose(json);
        CkStringBuilder_Dispose(sbRequestBody);
        CkStringBuilder_Dispose(sbResponseBody);
        return;
    }

    printf("Success.\n");


    CkRest_Dispose(rest);
    CkAuthAzureStorage_Dispose(azAuth);
    CkJsonObject_Dispose(json);
    CkStringBuilder_Dispose(sbRequestBody);
    CkStringBuilder_Dispose(sbResponseBody);

    }