2017-02-14 80 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