如何在C#中使用自定义凭据执行Google Spanner查询?
在C#中使用自定义凭据连接Google Spanner并执行查询
核心说明
SpannerClient 没有公开直接接收连接字符串和凭据的构造函数,必须通过 SpannerClientBuilder 配置自定义凭据并构建客户端实例,以下是具体实现步骤:
步骤1:安装依赖NuGet包
确保项目已安装 Google.Cloud.Spanner.Client 包(建议使用最新稳定版)。
步骤2:加载自定义JSON凭据
从JSON字符串加载凭据,并添加Spanner所需的权限范围:
string jsonCredentialContent = "你的服务账号JSON凭据内容"; var credentials = GoogleCredential.FromJson(jsonCredentialContent) .CreateScoped(SpannerClient.DefaultScopes);
步骤3:构建SpannerClient实例
方式一:通过项目/实例/数据库ID配置
var clientBuilder = new SpannerClientBuilder { ProjectId = "你的Google Cloud项目ID", InstanceId = "Spanner实例ID", DatabaseId = "目标数据库ID", Credentials = credentials }; SpannerClient client = clientBuilder.Build();
方式二:通过连接字符串配置
如果习惯使用连接字符串,格式为 Data Source=projects/{projectId}/instances/{instanceId}/databases/{databaseId},配置方式如下:
string connectionString = "Data Source=projects/你的项目ID/instances/你的实例ID/databases/你的数据库ID"; var clientBuilder = new SpannerClientBuilder { ConnectionString = connectionString, Credentials = credentials }; SpannerClient client = clientBuilder.Build();
步骤4:执行查询并处理结果
使用 CreateSelectCommand 创建查询命令,然后读取结果:
using var queryCmd = client.CreateSelectCommand("SELECT SingerId, AlbumId, AlbumTitle FROM Albums"); using var dataReader = await queryCmd.ExecuteReaderAsync(); while (await dataReader.ReadAsync()) { long singerId = dataReader.GetInt64(0); long albumId = dataReader.GetInt64(1); string albumTitle = dataReader.GetString(2); // 此处添加数据处理逻辑 }
注意事项
- 确保你的服务账号JSON凭据拥有Spanner数据库的读取权限(如
roles/spanner.databaseReader)。 - 若使用异步方法,需确保方法标记为
async并正确处理await。
内容的提问来源于stack exchange,提问作者Spanners
相关产品推荐
相关产品推荐

