我有一个遗留的VB6应用程序,其中servername,databasename,username等在INI文件中定义,但连接字符串的端口号(默认为1433)在应用程序中是硬编码的。它被移动到一个新的sql server后端,运行不同的端口号。我试图避免必须改变和重新编译需要重新测试,文档等的应用程序。我尝试更改INI文件,以便为我放入的新服务器:SERVERNAME \ INSTANCE,NEWPORTNUMBER
这有效地构建了与Data Source = 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"""
与SERVER&从INI文件中提取DATABASE值。
答案 0 :(得分:0)
我不确定使用连接字符串的每个库都必须以相同的方式解析它。我认为可能有一个库解析该连接字符串,只是丢弃最后一个端口号,另一个可能会导致无效端口号的错误。哪些库正在使用该连接字符串?
如果您正在使用集成安全性,那么您可以将INI文件中的数据源设置为“SERVERNAME,PORT; Password =”,并让SQL服务器忽略未使用集成安全性的密码密钥。也就是说,如果构造连接字符串的代码不检查那样的东西。噢,威尔·里卡德斯似乎已经说过了。
答案 1 :(得分:0)
端口1433通常会覆盖INSTANCENAME。 (MS blog Reference和another)
我看到3个选项:
答案 2 :(得分:0)
我们能看到创建连接字符串的代码吗?
是否存在需要使用TCP / IP连接到SQL Server的网络原因?
我的猜测是你只需要包含一个;在服务器名称/实例名称之后,只保留端口号。这将导致端口号成为连接字符串中的无关数据。我认为这只是被忽略了。您可以通过创建test.udl文件并双击它来自己测试创建连接字符串 - 按照向导进行操作。完成后,连接字符串位于udl文件中,您可以使用记事本查看。
当然,如果您正在寻找连接字符串的语法,可以在connectionstrings.com上查找它们
答案 3 :(得分:0)
一旦它起作用,你就不必重新测试所有东西(就像你在重新编译时那样) 如果新的端口号不是四位数,则比较棘手(阻力最小的路径:将其更改为四位端口)
我过去以这种方式改变了连接字符串。 VB6 exe总是使用DBCS,所以你可能必须使用十六进制编辑器,直到你弄清楚如何以正确的方式使用搜索功能。
如果端口号存储为整数,则查找起来可能比较困难,但仍然可以(查找附近的字符串以获取线索)。
答案 4 :(得分:0)
显然这个应用程序很快被黑客攻击。尝试使用像SERVER="{your_server},{your_port};FooBar="