通过go-mssqldb进行golang SQL Server查询

我尝试着查询 SQL Server 2008 R2 使用 go

https://github.com/denisenkom/go-mssqldb.

SQL Server 2008 R2实例位于Windows Server 2008 R2下的虚拟机上; 我正在Win 7 VMWare主机下进行开发,并从那里运行程序以查询VM上的数据库。 数据库已启动并运行服务器虚拟机上托管的应用程序。 代码如下。 我得到的错误是: [EDIT 2017-03-14:指定端口时出现新错误]

Login error: read tcp 192.168.91.1:15222->192.168.91.135:1433: wsarecv: An existing connection was forcibly closed by the remote host.

指定SQL Server端口(1433)时,将返回此错误。 包含或不包含实例都不会更改它。 SQL Server配置为允许远程连接,SQL Server身份验证,未加密的连接,启用TCP / IP,IPALL端口= 1433。 已为80、443、1433、1434上的TCP打开防火墙; UDP,1433,1434年。在将数据库实例添加到连接字符串中之前,我遇到了另一个错误。 SQL Server日志似乎表明机器正在通话。 IP地址用于VMWare主机和VM。 SQL Server浏览器服务正在运行(访问“本地服务”)。 SQL Server代理未运行。 我尝试使用ODBC和ADO连接字符串,但似乎遇到了相同的错误。如有 任何的帮助,我将不胜感激。
package main
import (
   // Import go-mssqldb strictly for side-effects
   _ "github.com/denisenkom/go-mssqldb"
   "database/sql"
   "log"
)

func main() {
   var n_tables int

   println (sql.Drivers())

   // URL connection string formats
   //    sqlserver://sa:mypass@localhost?database=master&connection+timeout=30         // username=sa, password=mypass.
   //    sqlserver://sa:my%7Bpass@somehost?connection+timeout=30                       // password is "my{pass"
   // note: pwd is "myP@55w0rd"
   connectString := "sqlserver://SBM:myP%4055w0rd@VM17:1433?database=AE&connection+timeout=30"
   println("Connection string=" , connectString )

   println("open connection")
   db, err := sql.Open("mssql", connectString)
   defer db.Close()
   println ("Open Error:" , err)
   if err != nil {
      log.Fatal(err)
   }

   println("count records in TS_TABLES & scan")
   err = db.QueryRow("Select count(*) from ts_tables").Scan(&n_tables)
   if err != nil {
      log.Fatal(err)
   }
   println ("count of tables" , n_tables)

   println("closing connection")
   db.Close()
}

output:

[2/2]0xc042002c20
Connection string= sqlserver://VM17_SBM:P%4055word@VM17:1433?database=VM17_SBM_AE_OE_REPO_CL&connection+timeout=30
open connection
Open Error: (0x0,0x0)
count records in TS_TABLES & scan
2017/03/14 19:48:01 Login error: read tcp 192.168.91.1:15222->192.168.91.135:1433: wsarecv: An existing connection was forcibly closed by the remote host.
exit status 1

2个回答



我在库作者在Github上的评论。</ p>

在连接字符串中添加“ encrypt = disable”即可。 我正在下载SQL Server 2008 R2 x64的SP3更新如此处建议 ,并在我有空的时候安装它。 就目前而言,虽然查询有效。</ p>
</ div>

展开原文

原文

I found the answer in a comment by the library author on Github.

Adding the "encrypt=disable" to the connection string did it. I'm downloading the SP3 update for SQL Server 2008 R2 x64 as suggested here and will install it when I get some time. As for now though the query works.



以下是github仓库</ p>


确保SQL Server浏览器窗口 服务正在运行,并且没有防火墙阻止UDP端口1434。驱动程序使用此服务来获取SQL Server实例的TCP端口</ p>
</ blockquote>

确保您的SQLbrowser 服务正在主机上运行。</ p>

还可以指定连接字符串以及端口号(如果端口是静态的,则无需启动SQLBrowser服务)</ p>

</ div>

展开原文

原文

The github repo says below

Ensure that the SQL Server Browser windows service is running and there is no firewall blocking UDP port 1434. This service is used by the driver to get the TCP port of the SQL Server instance

Ensure your SQLbrowser service is running on your host..

also you can specify your connection string along with port number(this negates the need of starting SQLBrowser service,if your port is static)

dsirr48088
dsirr48088 在两个端口上都启用了TCP和UDP。 npcap在我的系统上不起作用,因此无法进行nmap UDP扫描。 我不允许从笔记本电脑“外部”访问VM。
3 年多之前 回复
du521521521
du521521521 是否启用了tcp,是否可以从外部ping服务器
3 年多之前 回复
dongpiao9078
dongpiao9078 阅读udp 192.168.91.1:49155->192.168.91.135:1434为什么连接是udp
3 年多之前 回复
douhuang9886
douhuang9886 我用其他服务器配置信息编辑了帖子。 SQL浏览器正在运行。 指定端口似乎无关紧要。 我不知道为什么要过滤NMAP 1434:端口状态服务版本1433 / tcp打开ms-sql-s Microsoft SQL Server 2008 R2 10.50.1600; RTM 1434 / tcp过滤的ms-sql-m
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐