spanner/api/Spanner.Samples/UpdateDataWithJsonAsync.cs (74 lines of code) (raw):
// Copyright 2021 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// [START spanner_update_data_with_json_column]
using Google.Cloud.Spanner.Data;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
public class UpdateDataWithJsonAsyncSample
{
public class Venue
{
public int VenueId { get; set; }
public string VenueDetails { get; set; }
}
public async Task UpdateDataWithJsonAsync(string projectId, string instanceId, string databaseId)
{
List<Venue> venues = new List<Venue>
{
// If you are using .NET Core 3.1 or later, you can use System.Text.Json for serialization instead.
new Venue
{
VenueId = 19,
VenueDetails = JsonConvert.SerializeObject(new
{
rating = 9,
open = true,
})
},
new Venue
{
VenueId = 4,
VenueDetails = JsonConvert.SerializeObject(new object[]
{
new
{
name = "room 1",
open = true,
},
new
{
name = "room 2",
open = false,
},
})
},
new Venue
{
VenueId = 42,
VenueDetails = JsonConvert.SerializeObject(new
{
name = "Central Park",
open = new
{
Monday = true,
Tuesday = false,
},
tags = new string[] {"large", "airy" },
}),
},
};
// Create connection to Cloud Spanner.
string connectionString = $"Data Source=projects/{projectId}/instances/{instanceId}/databases/{databaseId}";
using var connection = new SpannerConnection(connectionString);
await connection.OpenAsync();
await Task.WhenAll(venues.Select(venue =>
{
// Update rows in the Venues table.
using var cmd = connection.CreateUpdateCommand("Venues", new SpannerParameterCollection
{
{ "VenueId", SpannerDbType.Int64, venue.VenueId },
{ "VenueDetails", SpannerDbType.Json, venue.VenueDetails }
});
return cmd.ExecuteNonQueryAsync();
}));
Console.WriteLine("Data updated.");
}
}
// [END spanner_update_data_with_json_column]