求助:使用Google Apps Script与JDBC无法连接本地Microsoft SQL Server
Google Apps Script JDBC连接本地MS-SQL Server失败的解决方案
你遇到的Exception: Failed to establish a database connection. Check connection string, username and password.错误,大概率是网络配置、连接字符串格式或SQL Server设置问题导致的,以下是针对性排查和修复步骤:
1. 解决网络可达性问题
Google Apps Script运行在谷歌云端,本地SQL Server默认只允许内网访问,云端无法直接连接:
- 给路由器设置端口转发:把外部7990端口映射到本地运行SQL Server的机器内网IP(比如192.168.x.x)的7990端口
- 关闭本地防火墙的7990端口入站限制,或者添加允许外部访问该端口的规则
- 用
telnet 你的公网IP 7990测试端口是否开放,确保云端能连通
2. 修正JDBC连接字符串格式
MS SQL Server的JDBC连接字符串不支持用/拼接数据库名,正确格式需要用;databaseName=参数:
// 错误格式:用/分隔数据库 // let url = "jdbc:sqlserver://"+HostName+":"+Port+"/"+DatabaseName; // 正确格式 let url = "jdbc:sqlserver://"+HostName+":"+Port+";databaseName="+DatabaseName;
3. 检查SQL Server核心配置
- 启用TCP/IP协议:打开SQL Server配置管理器 → SQL Server网络配置 → 选择对应实例的协议 → 启用TCP/IP,在「IP地址」标签里设置监听端口为7990
- 切换身份验证模式:确保SQL Server设置为混合身份验证模式(SQL Server + Windows),纯Windows身份验证下SQL账号无法远程登录
- 验证账号权限:用
william账号在本地SSMS登录,确认能正常访问my_base数据库,且账号拥有远程访问权限
4. 确认账号密码有效性
- 检查密码是否正确,若包含特殊字符(如&、=),需进行URL编码后再填入
- 本地用SSMS测试
william账号登录,排除账号本身的问题
修复后的完整代码
function getConnection() { let HostName = "你的公网IP"; // 替换成本地机器的公网IP,不要用内网IP let DatabaseName = "my_base"; let Username = "william"; let Password = "你的密码"; let Port = "7990"; let url = "jdbc:sqlserver://"+HostName+":"+Port+";databaseName="+DatabaseName; try { let connection = Jdbc.getConnection(url, Username, Password); Logger.log("连接成功:" + connection); connection.close(); } catch(e) { Logger.log("连接失败详情:" + e.message); } }
内容的提问来源于stack exchange,提问作者William Alves
相关产品推荐
相关产品推荐

