无法使用Go连接到MS SQL Server

时间:2015-04-09 02:14:43

标签: sql-server windows go

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

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

我正在使用winauth,它适用于sql management studio。

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

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

我已尝试连接到远程sql server并且它可以正常工作。 远程服务器是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")
}

2 个答案:

答案 0 :(得分:3)

我不久前遇到过同样的问题,经过两天的研究,我得以解决这个问题。

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

Connection Properties

但是,这不是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动态端口”字段中显示的数字是正确的端口号。
  8. SQL Server Configuration Manager

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

    sqlserver-agent -debug=true -server=localhost -port=62587 -user=Username -password=Password -database=DatabaseName
    

答案 1 :(得分:0)

这个https://code.google.com/p/odbc/驱动程序可以帮我使用MS SQL Server。

亚历