Linux 上的 SQL Server:来自 Windows 的 ODBC 连接有效,应用程序无效
Posted
技术标签:
【中文标题】Linux 上的 SQL Server:来自 Windows 的 ODBC 连接有效,应用程序无效【英文标题】:SQL Server on Linux: ODBC connection from Windows works, application does not 【发布时间】:2020-01-09 13:59:24 【问题描述】:我有一个带有 Linux Ubuntu 16.04“服务器”的测试环境,运行 MS SQL Server 17,公司数据库在其中托管。我的客户端机器是 Windows 7 机器。
我已设法将数据库导入 Linux 服务器,并且能够从 Windows 客户端创建并成功测试 ODBC 连接。 Windows PC 上的 SQL Server Management Studio 能够在 Linux 上的 SQL Server 实例上创建/删除表、创建用户、对象等。我在 VB 6.0 中连接如下
Dim rec1 As ADODB.Recordset
Set rec1 = New ADODB.Recordset
rec1.Open "Select * from tblSysReg", gstrDefaultDB, adOpenDynamic, adLockOptimistic
gstrDefaultDB 是包含 ODBC 注册和测试连接名称的字符串。
连接测试凭据为:系统管理员 (sa) 和密码。
连接设置为使用 SQL Server 身份验证
这是产生错误的地方,如下所示:
自动化错误代码-2147217843但是,当我从 Windows 客户端运行软件程序时,它无法从数据库表 (tblSysReg) 中“读取”并生成自动化错误。
成功的ODBC连接参数如下:
类型:TCP/IP 服务器:10.0.0.3 端口:1433我使用我的 SQL Server 密码以“sa”身份登录,用于 Linux 上的 SQL Server。
我正在努力了解连接测试如何成功,使用连接的程序无法从 Linux 上的 SQL Server 数据库中的任何表中读取?
提前谢谢你。
【问题讨论】:
您能否发布您在应用程序中使用的连接字符串,以及您收到的具体错误? 该应用程序是使用Visual Basic 6开发的。用于访问数据库对象的代码如下: Dim rec1 As ADODB.Recordset Set rec1 = New ADODB.Recordset rec1.Open "Select * from tblSysReg ", gstrDefaultDB, adOpenDynamic, adLockOptimistic 这是产生错误的地方,如下:自动化错误代码-2147217843 gstrDefaultDB 是包含 ODBC 注册和测试连接名称的字符串。连接测试凭据是:系统管理员 (sa) 和密码。连接设置为使用 SQL Server 身份验证, Microsoft SQL Server ODBC 驱动程序版本 06.01.7601 正在运行连接测试... 正在尝试连接 已建立连接 正在验证选项设置 与服务器断开连接 测试成功完成! (实现了从 Windows 客户端到 Linux 托管 SQL Server 的连接。) 谢谢... 【参考方案1】:根据 cmets 中的代码,您尝试将连接字符串传递给 rec1.Open()
而不是连接对象。您需要使用 Connection 对象打开与数据库的连接,然后在打开 Recordset 时使用该对象。
类似的东西
Dim conn as ADODB.Connection
Dim rec1 As ADODB.Recordset
Set conn = New ADODB.Connection
Set rec1 = New ADODB.Recordset
conn.Open gstrDefaultDB
rec1.Open "Select * from tblSysReg", conn, adOpenDynamic, adLockOptimistic
... [do more stuff] ...
rec1.Close
conn.Close
您还可以使用Connection
上的Execute
方法返回记录集。
Dim conn as ADODB.Connection
Dim rec1 As ADODB.Recordset
Set conn = New ADODB.Connection
conn.Open gstrDefaultDB
Set rec1 = conn.Execute("Select * from tblSysReg")
... [do more stuff] ...
rec1.Close
conn.Close
查看此页面了解更多示例:https://support.microsoft.com/en-us/help/168336/how-to-open-ado-connection-and-recordset-objects
【讨论】:
我会听从您的建议和回复。谢谢。 非常感谢,您的简单而有效的解决方案使我能够完成迁移到 Linux for SQL Server on Windows ..... 太棒了!祝你好运:) 我想提一下,我们在 Linux 上托管的新 SQL Server“服务器”的性能非常出色,整个练习非常值得。由于这种效率,我们现在还计划向更大的客户推广。以上是关于Linux 上的 SQL Server:来自 Windows 的 ODBC 连接有效,应用程序无效的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server on Red Hat Enterprise Linux——RHEL上的SQL Server(全截图)
Docker SQL Server 2017 上的 Linux 连接问题
Configure Red Hat Enterprise Linux shared disk cluster for SQL Server——RHEL上的“类”SQL Server Cluster功能