【发布时间】:2017-01-19 19:48:59
【问题描述】:
在我的 Delphi 7 应用程序中,可以建立与 sql server 的连接并将连接字符串存储在配置文件中。
多年来,这一直有效,没有任何麻烦。
构建连接字符串的代码是这样的:
procedure TDataModuleMain.GetADOProviderString;
var
ConnectionString : string;
begin
ConnectionString := PromptDataSource(Application.MainForm.Handle, cdsConnectionsADOConnectionString.AsString);
if ConnectionString <> cdsConnectionsADOConnectionString.AsString then
begin
if not (cdsConnectionsADO.State in [dsEdit, dsInsert]) then
cdsConnectionsADO.Edit;
cdsConnectionsADOConnectionString.AsString := ConnectionString;
end;
end;
PromptDataSource 是 ADODB.pas 中的一个函数,它会调出
Microsoft datalink property window 并在配置连接后返回连接字符串。
过去,我可以取消选中 Blank password 并选中 Allow saving password,并且返回的连接字符串中存在密码和 security info=true。
但这已经改变了一段时间,不知道什么时候。该函数现在永远不会返回密码并且不再包含安全信息=true。因此,这些复选框总是会恢复并且密码总是空的,就像这个截图一样:
我怀疑某些 Windows 更新已经对我这样做了,或者可能是其他原因?
我希望有人遇到过这个问题并有解决方案。
编辑 1
只有当我选择SQL Server Native Client 11.0 作为提供者时,才会出现问题。当我选择Microsoft OLE DB Provider for SQL Server 时没有问题,一切正常。
有没有办法让 Native Client 运行并返回所需的连接字符串?
我正在测试的操作系统是 Windows 8.1
编辑 2
我尝试按照 cmets 中的建议设置属性持久安全信息 = true,但是在使用本机客户端时再次恢复,但在使用 OLE DB 客户端时不会恢复
编辑 3
按照 cmets 中的建议,我通过制作扩展名为 .udl 的文本文件并双击它来尝试它。结果是一样的,它适用于 OLE DB 提供程序,但不适用于本机客户端
【问题讨论】:
-
我认为您的 q 缺少几项,即您使用的是哪个操作系统和哪个 ADO 提供商?
-
@MartynA 我在我的问题中添加了提供程序和操作系统。
-
@Sami 谢谢你的链接,但我没有看到任何关于我的问题的信息。我本来可以忽略它的
-
尝试添加
Persist Security Info=True