如何将C#应用连接至Google Cloud SQL Server 2022 Express数据库
C#连接Google Cloud托管的SQL Server 2022 Express数据库
前置要求
- 已获取具有Cloud SQL Client角色的服务账号JSON密钥文件
- 项目中安装以下NuGet包:
Install-Package Google.Cloud.SqlConnector Install-Package Microsoft.Data.SqlClient
设置服务账号环境变量
在终端执行命令(和Python环境一致):
set GOOGLE_APPLICATION_CREDENTIALS=C:\path\to\my\serviceAcc.json
正确连接代码示例
基础连接与查询
using Google.Cloud.SqlConnector; using Microsoft.Data.SqlClient; using System; namespace CloudSqlSqlServerDemo { class Program { static void Main(string[] args) { // 替换为你的实例连接名(格式:项目ID:区域:实例ID) string instanceConnectionName = "data-warehous-511371:europe-west3:test-sql"; string databaseName = "mytestdb"; string username = "sqlserver"; string password = "你的数据库密码"; // 对应Python中读取的密码 // 初始化SqlConnector,生成符合要求的连接字符串 var sqlConnector = new SqlConnector(); string connectionString = sqlConnector.CreateConnectionString( instanceConnectionName, databaseName, username, password, ipType: IPTypes.Public // 使用公网IP连接,与Python代码保持一致 ); // 建立连接并执行查询 using (var connection = new SqlConnection(connectionString)) { connection.Open(); Console.WriteLine("连接成功!"); using (var command = new SqlCommand("SELECT * FROM dbo.testtable", connection)) { using (var reader = command.ExecuteReader()) { while (reader.Read()) { // 示例:输出每行第一列的值,可根据实际表结构调整 Console.WriteLine(reader[0].ToString()); } } } } } } }
连接池实现(类似Python的SQLAlchemy连接池)
如果需要复用连接,可使用连接池:
using Google.Cloud.SqlConnector; using Microsoft.Data.SqlClient; using System; namespace CloudSqlSqlServerPoolDemo { class Program { static void Main(string[] args) { string instanceConnectionName = "data-warehous-511371:europe-west3:test-sql"; string databaseName = "mytestdb"; string username = "sqlserver"; string password = "你的数据库密码"; var sqlConnector = new SqlConnector(); var poolOptions = new SqlConnectionPoolOptions { ConnectionString = sqlConnector.CreateConnectionString( instanceConnectionName, databaseName, username, password, ipType: IPTypes.Public ), MinimumPoolSize = 2, MaximumPoolSize = 10 // 根据业务调整连接池大小 }; // 创建连接池 using (var pool = new SqlConnectionPool(poolOptions)) { // 从连接池获取连接 using (var connection = pool.GetConnection()) { connection.Open(); Console.WriteLine("从连接池获取连接成功!"); // 执行查询逻辑... } } } } }
为什么之前的代码失败
你之前的连接字符串格式错误:SQL Server的标准连接字符串不支持projects/{projectId}/instances/{instanceId}/databases/{databaseName}这种格式,必须通过Google提供的SqlConnector来生成正确的连接字符串,它会自动处理Cloud SQL的IP解析、代理连接及服务账号认证逻辑。
内容的提问来源于stack exchange,提问作者lxg_numares
相关产品推荐
相关产品推荐

