2010-05-14 108 views
1

我有一个传统的VB6应用程序,其中服务器名,数据库名,用户名等在INI文件中定义,但连接字符串的端口号(默认1433)在硬编码应用程序。它被移动到一个新的sql server后端运行一个不同的端口号。我试图避免必须改变和重新编译需要重新测试的应用程序,文档等。我尝试更改INI文件,以便对于我放入的新服务器:SERVERNAME \ INSTANCE,NEWPORTNUMBER在SQL Server连接字符串中列出的多个端口

This effective使用数据源= SERVERNAME \ INSTANCE,NEWPORTNUMBER,1433建立连接;

这似乎正常工作,因为它在我运行应用程序时连接到数据库。在我看来,1433部分被忽略。这是一个有效的假设,否则这会导致我在这里看不到一些问题?

编辑:字符串的方式连接字符串是建立在VB6代码:

ConnectString = "Provider=MSDataShape;Trusted_Connection=Yes;Data Source=" & SERVER & ",1433;Initial Catalog=" & DATABASE & ";Data Provider=SQLOLEDB.1;Extended Properties=""Network=DBMSSOCN""" 

从INI文件拉到SERVER &数据库值。

+0

什么最终解决了这个问题?您是否强制服务器使用端口1433?大量替换和重新编译? SQL别名? – UnhandledExcepSean 2011-12-23 21:52:45

+0

相当长一段时间,但据我记得,它似乎忽略了端口号和使用SERVERNAME \ INSTANCE并工作得很好,所以我们就这样离开它。 – BBlake 2011-12-24 18:06:46

回答

0

我不确定每个使用连接字符串的库都必须以相同的方式解析它。我认为可能有一个库解析该连接字符串,并从最后一个端口号丢弃,另一个可能会导致无效端口号错误。哪些库正在使用该连接字符串?

如果您使用的是集成安全性,那么也许可以将INI文件中的数据源设置为“SERVERNAME,PORT; Password =”,并让SQL服务器忽略未使用集成安全性的密码键。那就是如果构造连接字符串的代码不检查那样的东西。哦,威尔·里克兹斯也会这样说。

+0

只是VB6中的标准ADO连接。 – BBlake 2010-05-14 16:44:51

0

端口1433通常会覆盖INSTANCENAME。 (MS blog Referenceanother

3个选项我看到:

  • 实例名称被忽略,并且要连接到默认实例在端口1433
  • 命名实例在端口1433
  • 监听
  • 你有一个客户端别名(不相信这一个)
0

我们可以看到,创建连接字符串的代码?

是否有网络原因需要使用TCP/IP连接到SQL Server?

我的猜测是,你只需要包括一个;在服务器名称/实例名称后面,并且完全离开端口号。这会使端口号成为连接字符串中的无关数据。我认为这只是被忽略。你可以通过创建一个test.udl文件并双击它来测试创建一个连接字符串 - 按照向导。完成后,连接字符串位于udl文件中,您可以使用记事本查看该文件。

当然,如果你正在寻找连接字符串的语法,你可以在连接字符串上查找它们。COM

+0

,1433被硬编码到构建字符串的VB6代码中。没有重新编译应用程序的情况下,无法离开它。 – BBlake 2010-05-15 12:27:12

+0

我想你错过了我的观点,但看到wqw上面的答案,这基本上是我建议的。并且由于指定了库,您可能需要传递端口号。但是你可以在没有它的情况下进行测试并查看 – 2010-05-18 15:02:11

0
  1. 下载一个免费的十六进制编辑器
  2. 保存原来的EXE副本某处 安全
  3. 打开的十六进制编辑器中的exe文件
  4. 查找1433,更改为您 新的端口号

一旦它的工作原理,你就不必再测试一切(就像你会在重新编译)
如果新的端口NU mber不是四位数字它更棘手(阻力最小的路径:将其更改为四位数端口)

我已经以此方式改变了连接字符串。 VB6 exe总是使用DBCS,因此您可能必须使用十六进制编辑器进行操作,直至找出如何以正确的方式使用搜索功能。

如果端口号存储为整数,则查找可能会更加棘手,但仍然可能(查找附近的字符串以查找线索)。

+0

不幸的是,这是一个主要的企业环境和分发给多个用户的应用程序,这不是一个选项。对不起,我没有在我的描述中详细说明。 – BBlake 2010-05-15 12:25:56

0

显然这个应用程序很快被黑客一起。尝试用一个简单的连接串注入来解决这个问题,如SERVER="{your_server},{your_port};FooBar="