spanner/api/Spanner.Samples/ReadStaleDataAsync.cs (38 lines of code) (raw):

// Copyright 2020 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_read_stale_data] using Google.Cloud.Spanner.Data; using System; using System.Collections.Generic; using System.Threading.Tasks; public class ReadStaleDataAsyncSample { public class Album { public int SingerId { get; set; } public int AlbumId { get; set; } public long? MarketingBudget { get; set; } } public async Task<List<Album>> ReadStaleDataAsync(string projectId, string instanceId, string databaseId) { string connectionString = $"Data Source=projects/{projectId}/instances/{instanceId}/databases/{databaseId}"; using var connection = new SpannerConnection(connectionString); await connection.OpenAsync(); var staleness = TimestampBound.OfExactStaleness(TimeSpan.FromSeconds(15)); using var transaction = await connection.BeginTransactionAsync( SpannerTransactionCreationOptions.ForTimestampBoundReadOnly(staleness), transactionOptions: null, cancellationToken: default); using var cmd = connection.CreateSelectCommand("SELECT SingerId, AlbumId, MarketingBudget FROM Albums"); cmd.Transaction = transaction; var albums = new List<Album>(); using var reader = await cmd.ExecuteReaderAsync(); while (await reader.ReadAsync()) { albums.Add(new Album { SingerId = reader.GetFieldValue<int>("SingerId"), AlbumId = reader.GetFieldValue<int>("AlbumId"), MarketingBudget = reader.IsDBNull(reader.GetOrdinal("MarketingBudget")) ? 0 : reader.GetFieldValue<long>("MarketingBudget") }); } return albums; } } // [END spanner_read_stale_data]