使用 Spanner ADO.NET 驅動程式

ADO.NET 是用於存取 .NET 資料來源的通用介面。如要在應用程式中使用 ADO.NET,請使用 Spanner ADO.NET 驅動程式

SpannerADO.NET 驅動程式同時支援 GoogleSQL 方言資料庫和 PostgreSQL 方言資料庫。

安裝 Spanner ADO.NET 驅動程式

如要在應用程式中使用 Spanner ADO.NET 驅動程式,請將下列套件新增至 .NET 專案:

  Google.Cloud.Spanner.DataProvider

使用 Spanner ADO.NET 驅動程式

如要建立 ADO.NET 連線至 Spanner 資料庫,請建立 SpannerConnectionStringBuilder,並以完整資料庫名稱做為連線字串:

GoogleSQL

/// <summary>
/// Create an ADO.NET connection to a Spanner database.
/// </summary>
/// <param name="connectionString">
/// A connection string in the format
/// 'Data Source=projects/my-project/instances/my-instance/databases/my-database'.
/// </param>
public static async Task CreateConnection(string connectionString)
{
    // Use a SpannerConnectionStringBuilder to construct a connection string.
    // The SpannerConnectionStringBuilder contains properties for the most
    // used connection string variables.
    var builder = new SpannerConnectionStringBuilder(connectionString)
    {
        // Sets the default isolation level that should be used for all
        // read/write transactions on this connection.
        DefaultIsolationLevel = IsolationLevel.RepeatableRead,

        // The Options property can be used to set any connection property
        // as a key-value pair.
        Options = "statement_cache_size=2000"
    };

    await using var connection = new SpannerConnection(builder.ConnectionString);
    await connection.OpenAsync();

    await using var command = connection.CreateCommand();
    command.CommandText = "SELECT 'Hello World' as Message";
    await using var reader = await command.ExecuteReaderAsync();
    while (await reader.ReadAsync())
    {
        Console.WriteLine($"Greeting from Spanner: {reader.GetString(0)}");
    }
}

PostgreSQL

/// <summary>
/// Create an ADO.NET connection to a Spanner PostgreSQL database.
/// </summary>
/// <param name="connectionString">
/// A connection string in the format
/// 'Data Source=projects/my-project/instances/my-instance/databases/my-database'.
/// </param>
public static async Task CreateConnection(string connectionString)
{
    // Use a SpannerConnectionStringBuilder to construct a connection string.
    // The SpannerConnectionStringBuilder contains properties for the most
    // used connection string variables.
    var builder = new SpannerConnectionStringBuilder(connectionString)
    {
        // Sets the default isolation level that should be used for all
        // read/write transactions on this connection.
        DefaultIsolationLevel = IsolationLevel.RepeatableRead,

        // The Options property can be used to set any connection property
        // as a key-value pair.
        Options = "statement_cache_size=2000"
    };

    await using var connection = new SpannerConnection(builder.ConnectionString);
    await connection.OpenAsync();

    await using var command = connection.CreateCommand();
    command.CommandText = "SELECT 'Hello World' as Message";
    await using var reader = await command.ExecuteReaderAsync();
    while (await reader.ReadAsync())
    {
        Console.WriteLine($"Greeting from Spanner: {reader.GetString(0)}");
    }
}

詳情請參閱 Spanner ADO.NET 驅動程式 GitHub 存放區

支援功能

Spanner ADO.NET 驅動程式範例程式碼目錄包含常用 Spanner 功能的範例,可直接執行。

效能提示

如要盡可能提升 Spanner ADO.NET 驅動程式的效能,請遵循下列最佳做法:

後續步驟

  • 進一步瞭解如何搭配使用 ADO.NET 驅動程式與 Spanner 程式碼範例
  • 進一步瞭解 ADO.NET
  • 提出 GitHub 問題,回報功能要求或錯誤,或詢問 Spanner ADO.NET 驅動程式相關問題。