【问题标题】:OLE DB Provider for SQL Server works, but not SQL Native ClientSQL Server 的 OLE DB 提供程序有效,但 SQL Native Client 无效
【发布时间】:2013-03-28 19:08:49
【问题描述】:

我的想法已经不多了,所以请检查是否有人可以提供一些启示。

  • 2 层客户端-服务器应用程序
  • SQL Server 2005
  • 工作站:Windows XP
  • 客户端-服务器应用程序 1 使用 SQL OLE DB 提供程序。 (提供者=SQLOLEDB.1)
  • 客户端-服务器应用程序 2 使用 SQL Native Client。 (System.Data.SqlClient.SqlConnection)

不知何故,应用程序 1 运行良好,但应用程序 2 需要将连接超时设置为 30 秒才能使其正常工作。

使用我从 JohnnyCoder 的Database Connectivity Test with UDL File 学到的技巧,我发现问题出在驱动程序的某个地方。当我尝试 Microsoft OLE DB Provider for SQL Server 时,它会立即连接。 当我尝试 SQL Native Client 时,它不会花很长时间。即使我将连接超时设置为 60,它也会失败

这两个应用程序都可以在其他安装上运行良好,但在一个特定站点上却不行。所以它必须与一些环境设置有关,例如安全、防火墙等。

我尝试在工作站上安装新的 SQL Server 2005 Native Client。没有运气。

所以我的问题是:

  1. 当客户端实际上无法连接时,为什么应用程序 2 会使其工作?当 SQL Native Client 超时发生时,是否有使用 OLE DB 的内部逻辑?
  2. 您还想看什么?

【问题讨论】:

  • 在此处检查您的连接字符串:connectionstrings.com/…。验证它是否正确,或进行必要的更改以使其正确,然后再次尝试连接。将您正在使用的连接字符串添加到您的问题中。让我们知道结果。
  • 感谢您的回复。我的完整 OLE DB 提供程序连接字符串如下所示:“Provider=SQLOLEDB.1;Persist Security Info=False;User ID=username;Password=password;Initial Catalog=database;Data Source=server\instance” 我完整的 SqlConnection 字符串是除了 Provider 属性外完全相同,因此“Persist Security Info=False;User ID=username;Password=password;Initial Catalog=database;Data Source=server\instance”。希望这能澄清您想知道的内容。
  • 在代码中具体如何使用:var conn = new System.Data.SqlClient.SqlConnection(ConnectionString);

标签: sql-server-native-client


【解决方案1】:

答案:他们的网络防火墙阻止了 TCP/IP 数据包。 结果,SQL Native Client 在 20 秒后使用 TCP/IP 超时,然后尝试使用命名管道使其工作。

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多