无法使用 Go 连接到 MS SQL Server

Cog*_*ave 3 windows sql-server go

我正在尝试使用 go 和此 sql 驱动程序“github.com/denisenkom/go-mssqldb”连接到 sql server express

目前,它调用 open,然后在 ping 命令上停止,它从不 ping 或返回错误。

我正在使用 winauth,它与 sql management studio 一起使用。

我已经验证了数据库名称,如果我输入了错误的名称,则会生成错误并在打开步骤中记录该错误。

我尝试过设置一个非常短的连接超时,但同样的事情发生了。

我尝试连接到远程 SQL 服务器并且它工作正常。远程服务器是 sql server 的开发人员版本,名称类似于 xyz.abc.123,其中我的本地 sql express 称为 machine-name\sqlexpress。

这是一个示例程序。

package main

import (
    "database/sql"
    _ "github.com/denisenkom/go-mssqldb"
    "log"
)

func main() {

    log.Println("Main:")

    log.Println("Opening")
    db, err := sql.Open("mssql", "server=Machine-Name\\SQLEXPRESS; database=MyDatabaseName;")

    if err != nil {
        log.Println("Open Failed: ", err.Error())
    }
    log.Println("Opened")

    log.Println("Pinging")
    err = db.Ping();
    if err != nil {
        log.Println("Failed to ping: ", err.Error())
    }

    log.Println("Pinged")
}
Run Code Online (Sandbox Code Playgroud)

小智 5

不久前我也遇到了同样的问题,经过两天的研究,我能够解决这个问题。

令人困惑的方面似乎来自这样一个事实:go-mssqldb 需要传递一个名为“server”的参数,并且在 SQL Management Studio 中,它们在连接属性中对服务器有明确的引用:

连接属性

然而,这不是 go-mssqldb 正在寻找的值。它正在寻找安装数据库的实际服务器。意思是,如果它安装在您的本地 PC 上,这将是“localhost”。如果它位于网络中的另一台计算机上,则这将是相应的 IP 地址或服务器名称

另一件需要记住的事情是 go-mssqldb 需要一个端口来连接到数据库,如果您不提供端口,它会假设端口是 1433。但是,我的不是这个值。为了查找您的端口号:

  1. 打开 SQL Server 配置管理器。
  2. 展开左侧树上的“SQL Server 网络配置”。
  3. 单击“SQLEXPRESS 协议(或您的数据库的任何名称)”
  4. 在主菜单中,确保“TCP/IP”已启用。如果没有,请右键单击它并选择“启用”。
  5. 再次右键单击“TCP/IP”并选择属性。
  6. 选择“IP 地址”选项卡并一直向下滚动。
  7. 查看“IPAll”部分,“TCP 动态端口”字段中显示的数字是正确的端口号。

SQL Server 配置管理器

最后,我最终用来运行代码的命令是:

sqlserver-agent -debug=true -server=localhost -port=62587 -user=Username -password=Password -database=DatabaseName
Run Code Online (Sandbox Code Playgroud)