2010-05-14 77 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="