【问题标题】:google apps script jbdc sql server database connection string error谷歌应用程序脚本 jbdc sql server 数据库连接字符串错误
【发布时间】:2016-08-14 20:43:22
【问题描述】:

我正在尝试使用大约 3 年前从该站点 Querying SQL Server with Google Apps Script via JDBC 找到的代码连接到我的家庭网络中的本地 sql 服务器数据库,该代码被标记为正确。但是,我收到错误消息“很抱歉,发生服务器错误。请稍候,然后重试。”。此错误来自定义连接字符串的第 2 行。我重试了几次,但我总是得到同样的错误。当我搜索此错误时,似乎它可能是太多的东西,我无法为我的问题找到任何答案。谢谢。

这是被标记为正确的代码:

function readAzure() {
     var conn = Jdbc.getConnection("jdbc:sqlserver://XYZ.database.windows.net:1433;databaseName=MYDATABSENAME","USERNAME","PASSWORD");
     var stmt = conn.createStatement();
     var rs = stmt.executeQuery("select * from helloworld");

     var doc = SpreadsheetApp.create('azure');
     var cell = doc.getRange('a1');
     var row = 0;
     while(rs.next()) {
     cell.offset(row, 0).setValue(rs.getString(1));
     cell.offset(row, 1).setValue(rs.getString(2));
     row++;
     }


   rs.close();
   stmt.close();
       conn.close();

}

我还找到了另一个连接字符串代码,当我尝试这种格式时,我得到了同样的错误。

var conn = Jdbc.getConnection("jdbc:sqlserver://IP-address:1433;" + "databaseName=DBName;user=username;password=password;");

【问题讨论】:

  • 您的服务器可用吗?尝试从另一个客户端连接。我想Valentina Studio 可能是您的服务器使用了额外的加密?

标签: sql-server google-apps-script connection-string server-error


【解决方案1】:

根据此documentation,您需要确保您的数据库接受来自任何 Apps 脚本 IP 地址的连接。这些是您需要列入白名单的地址范围。

64.18.0.0 - 64.18.15.255
64.233.160.0 - 64.233.191.255
66.102.0.0 - 66.102.15.255
66.249.80.0 - 66.249.95.255
72.14.192.0 - 72.14.255.255
74.125.0.0 - 74.125.255.255
173.194.0.0 - 173.194.255.255
207.126.144.0 - 207.126.159.255
209.85.128.0 - 209.85.255.255
216.239.32.0 - 216.239.63.255

此外,从上面的文档链接中,您可以按照示例代码通过 JDBC 设置外部数据库。

这里的代码演示了如何将一条记录写入数据库以及一批 500 条记录。

// Replace the variables in this block with real values.
var address = 'database_IP_address';
var user = 'user_name';
var userPwd = 'user_password';
var db = 'database_name';

var dbUrl = 'jdbc:mysql://' + address + '/' + db;

// Write one row of data to a table.
function writeOneRecord() {
  var conn = Jdbc.getConnection(dbUrl, user, userPwd);

  var stmt = conn.prepareStatement('INSERT INTO entries '
      + '(guestName, content) values (?, ?)');
  stmt.setString(1, 'First Guest');
  stmt.setString(2, 'Hello, world');
  stmt.execute();
}

// Write 500 rows of data to a table in a single batch.
function writeManyRecords() {
  var conn = Jdbc.getConnection(dbUrl, user, userPwd);
  conn.setAutoCommit(false);

  var start = new Date();
  var stmt = conn.prepareStatement('INSERT INTO entries '
      + '(guestName, content) values (?, ?)');
  for (var i = 0; i < 500; i++) {
    stmt.setString(1, 'Name ' + i);
    stmt.setString(2, 'Hello, world ' + i);
    stmt.addBatch();
  }

  var batch = stmt.executeBatch();
  conn.commit();
  conn.close();

  var end = new Date();
  Logger.log('Time elapsed: %sms for %s rows.', end - start, batch.length);
}

如需了解更多信息,请阅读此documentation 并查看此thread 和相关SO question

【讨论】:

  • 当我在云 sql server 数据库上尝试代码时,Google Apps 脚本开发页面中发布的白名单有效。我没有机会尝试您的代码,但基本上除了语法之外,还需要流量路由配置,我可以在我的云网络上进行。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
相关资源
最近更新 更多