将 Google 应用脚本连接到 Azure 上的 SQL 服务器 (DBaaS)

Connecting Google App Script to SQL Server on Azure (DBaaS)

我正在尝试使用 Google 应用程序脚本将 Google Sheet 连接到托管在 Azure (DBaaS) 上的 SQL 服务器实例。尽管我多次尝试修改代码,但我不断收到一条错误消息,指出我的连接字符串无效。我可以使用 Microsoft SQL Server Management Studio 和 HeidiSQL 从我的本地计算机连接到 Azure 上 SQL Server 的这个实例。请注意,我已将每个 IPp 地址(0.0.0.0 到 255.255.255.255)列入白名单,以确保这不是阻止我连接的防火墙问题。

    //var conn = Jdbc.getConnection('jdbc:sqlserver:MyDBName.database.windows.net:1433/MyDBName', 'MyDBUserName', 'MyDBPassword');

  // SECOND ITERATION OF CONNECTION STRING
  //var conn = Jdbc.getConnection('jdbc:sqlserver://MyDBName.database.windows.net:1433;'+ 'databaseName=MyDBName;user=MyDBUserName;password=MyDBPassword;');

  // THIRD ITERATION OF CONNECTION STRING
  //var conn = Jdbc.getConnection('jdbc:sqlserver://MyDBName.database.windows.net/MyDBName:1433', 'MyDBUserName', 'MyDBPassword');

  // FOURTH ITERATION OF CONNECTION STRING
  //var conn = Jdbc.getConnection('MyDBName.database.windows.net','MyDBUserName', 'MyDBPassword');

  // FIFTH ITERATION OF CONNECTION STRING
  //var conn = Jdbc.getConnection('jdbc:sqlserver://MyDBName.database.windows.net', {user:'MyDBUserName', password:'MyDBPassword'});

  // SIXTH ITERATION OF CONNECTION STRING
  //var conn = Jdbc.getConnection('MyDBName.database.windows.net', {user:'MyDBUserName', password:'MyDBPassword'});  

  // SEVENTH ITERATION OF CONNECTION STRING
  //var conn = Jdbc.getConnection('jdbc:sqlserver://MyDBName.database.windows.net:1433/MyDBName', {user:'MyDBUserName', password:'MyDBPassword'});  

  // EIGHT ITERATION OF CONNECTION STRING
  //https://developers.google.com/apps-script/reference/jdbc/jdbc
  //var conn = Jdbc.getConnection('jdbc:sqlserver://MyDBName.database.windows.net/MyDBName:1433', {user:'MyDBUserName', password:'MyDBPassword'});    

  // NINTH ITERATION OF CONNECTION STRING  - Now I'm just throwing anything at the wall and seeing what sticks!
  //var conn = Jdbc.getConnection('jdbc:sqlserver://MyDBName.database.windows.net/MyDBName;user=MyDBUserName;password=MyDBPassword');

  // TENTH ITERATION OF CONNECTION STRING
  //var conn = Jdbc.getConnection('jdbc:mysql://MyDBName.database.windows.net/MyDBName:1433', {user:'MyDBUserName', password:'MyDBPassword'});    

  // ELEVENTH ITERATION OF CONNECTION STRING
  //var conn = Jdbc.getConnection('jdbc:sqlserver://MyDBName.database.windows.net:1433;databaseName=MyDBName','MyDBUserName','MyDBPassword');

  //TWELVTH
  //var conn = jdbc:sqlserver://MyDBName.database.windows.net;database=MyDBName;user=MyDBUserName;password=MyDBPassword;

  // THIRTEENTH
  //var conn = Jdbc.getConnection('jdbc:sqlserver://MyDBName.database.windows.net;user=MyDBUserName;password=MyDBPassword;databaseName=MyDBName;');

  // FOURTEENTH 
  //var conn = Jdbc.getConnection("jdbc:sqlserver//MyDBName.database.windows.net:1433;databaseName=MyDBName;user=MyDBUserName;password=MyDBPassword");

  // FIFTEENTH
  //var conn = Jdbc.getConnection("jdbc:sqlserver://MyDBName.database.windows.net:1433;databaseName=MyDBName","MyDBUserName","MyDBPassword");

  // SIXTEENTH
  //  
  //var conn = Jdbc.getConnection("jdbc:sqlserver://NumericalIPAddress:1433;" + "databaseName=MyDBName;user=MyDBUserName;password=MyDBPassword;");

  // SEVENTEENTH
  //  same as above with one less semicolon
  //var conn = Jdbc.getConnection("jdbc:sqlserver://NumericalIPAddress:1433;" + "databaseName=MyDBName;user=MyDBUserName;password=MyDBPassword");

  //EIGHTEENTH
  // 
  var conn = Jdbc.getConnection("jdbc:sqlserver://MyDBName.database.windows.net:1433;databaseName=MyDBName","MyDBUserName","MyDBPassword");

您可以在门户中找到应该用于数据库的确切连接字符串。单击当前门户 (https://manage.windowsazure.com) 中的数据库,您应该会看到下面显示 "Connect to your database" 的部分,其中有一个 link 显示“查看 SQL 数据库连接字符串对于 ADO .Net、ODBC、PHP 和 JDBC.

或者,如果您使用的是新版 Azure 门户 (https://portal.azure.com),您可以通过浏览所有 > SQL 数据库 > MyDBName > 显示数据库连接字符串找到连接字符串。

它为我提供的示例如下所示: jdbc:sqlserver://server21.database.windows.net:1433;database=Test;user=myuser@server21;password={your_password_here};encrypt=true;hostNameInCertificate=*.database.windows.net;登录超时=30;

我正在尝试连接到 Azure 数据库,发现 Azure 门户中指定的 JDBC 连接字符串和来自 Google 的示例不起作用 原样。 Azure 包含脚本引擎说不支持的几个属性,Google 一个(从 MySQL 更新)不起作用。这是我要做的工作:

var user = 'USER@SERVER';
var userPwd = 'PASSWORD';
var database = 'DB_NAME'
var connectionString = 'jdbc:sqlserver://SERVER.database.windows.net:1433;databaseName=' + database;

var conn = Jdbc.getConnection(connectionString , user, userPwd);

注意: "database=" 不受支持,但 "databaseName=" 受支持。支持 None 个加密或证书标签。

此外,您必须将一大组 IP 范围添加到服务器实例的防火墙规则中。如果您使用门户添加这些,请注意您一次只能对防火墙规则进行一项更改;这意味着添加一个范围,保存,重复。不要将所有 10 个都加起来,然后在尝试保存它们时出现错误(就像我第一次做的那样)。参见:https://developers.google.com/apps-script/guides/jdbc

供您参考,(截至 2018 年 6 月 5 日)在 Google Apps 脚本和 Azure DBaaS 上的 SQL 服务器数据库之间创建 ODBC 连接的正确连接字符串如下:

var conn = Jdbc.getConnection('jdbc:sqlserver://SERVER.database.windows.net:1433;databaseName={yourDatabaseName};user={yourUsername}@{yourServer};password={yourPassword}');