使用 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 驱动程序

如需创建与 Spanner 数据库的 ADO.NET 连接,请使用完全限定数据库名称作为连接字符串创建 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 驱动程序时获得尽可能高的性能,请遵循以下最佳实践:

后续步骤

  • 如需详细了解如何将 Spanner 与 ADO.NET 驱动程序搭配使用,请参阅 代码示例
  • 详细了解 ADO.NET
  • 提交 GitHub 问题 以报告功能请求或 bug,或提出有关 Spanner ADO.NET 驱动程序的问题。