2017-02-14 41 views
1

我正在使用Delphi 7,SQL Server 2008 R2和我正在使用ADO連接到數據庫。共享ADOConnectionString跨多個應用程序-delphi

我的連接字符串:

提供商= SQLOLEDB.1;集成安全性= SSPI;堅持安全信息=假;初始目錄= TESTDataBase;數據源= TestDataSource

當我做我的TADOconnection.Connected to True Connectin string is changing it to

Provider = SQLOLEDB.1; Integrated Security = SSPI; Persist Security Info = False; Initial Catalog = TESTDataBase; Data Source = TestDataSource; 使用Prepare = 1的程序; 自動翻譯= TRUE;數據包大小= 4096;工作站ID = MYMachineName;使用加密數據= FALSE;標記與列排序規則時可能=假

有超過10個應用,我打算使用相同的連接字符串在所有應用程序 因此,當我連接到FirstApplcation我創建ADO連接字符串,將其保存在註冊表中或某些地方,所以我可以使用相同的連接字符串爲其他應用程序也。

同一個用戶可以運行多個應用程序(它可以是2或3或5個應用程序)。

在這裏,我有3個問題

1)當我需要共享連接?

我的意思是創建連接字符串,並共享相同的連接字符串(寫入到註冊表或某些地方)

創建連接字符串,連接到數據庫和共享相同的連接字符串(寫入註冊表或一些地方)

2)在我的應用程序,當我得到共享連接字符串做我需要再次連接到數據庫(TADOConnection.Connected = true)?我想我應該重新連接,因爲它是不同的應用程序:)

3)我所有的應用程序打開我在申請(主要形式)形式顯示連接,我將關閉在應用程序接口(主要形式)的形式接近。只有當應用程序關閉並且TADOCOnnection.KeepConnection = True時,所有連接纔會關閉。這是創建性能問題還是數據庫服務器的負擔?

+1

只需將所需的屬性(目錄,服務器,登錄詳細信息......)保存在某處(配置文件,註冊表等),並自行構建連接字符串。 – whosrdaddy

回答

2

共享UDL文件可以很好地共享連接。使用需要屬性只針對您的連接字符串,即:

提供商= SQLOLEDB.1;集成安全性= SSPI;堅持安全 信息=假;初始目錄= TESTDataBase;數據源= TestDataSource

不要擔心在連接後,ADO 添加的額外屬性。這是您使用的特定供應商的默認屬性(SQLOLEDB.1)。如果使用確切的連接字符串或UDL文件(使用通用提供程序),則將在所有其他應用程序中設置相同的屬性。 默認情況下,SQL Server的ADO連接將被池化。

您可以簡單地設置例如

MyConnection.ConnectionString := 'FILE NAME=c:\my_shared_path\shared.udl'; 
MyConnection.Open; 

的好地方持有共享連接對象(TADOConnection)是在一個共享的數據模塊爲整個應用程序。 在數據模塊或主窗體OnCreate事件中打開它。 一旦銷燬TADOConnection,連接就會自動關閉。

+0

你能回答第三個問題嗎?數據庫服務器是否有任何性能問題或負擔?因爲我不關閉連接,直到我關閉應用程序?所以如果有100個用戶使用該應用程序,則會打開100個連接。所以對於5個應用程序5 * 100個用戶= 500個打開的連接 – DelphiLearner

+0

默認情況下,SQL Server允許最多32,767個用戶連接。大部分時間處於「睡眠」狀態。這對你來說足夠了嗎? – kobik

+0

所以不會有任何性能問題或服務器負擔。謝謝。 – DelphiLearner

相關問題