在我的 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 数据链路属性窗口
,配置连接后将返回连接字符串。
过去,我能够取消选中空白密码
并选中允许保存密码
,并且密码和security info=true
存在于返回的连接字符串。
但这种情况很久以前就已经改变了,不知道什么时候。该函数现在不再返回密码,并且不再包含 security info=true。因此,这些复选框始终会恢复,并且密码始终为空,如以下屏幕截图所示:
我怀疑某些 Windows 更新对我造成了这种情况,或者可能是其他原因?
我希望有人遇到过这个问题并有解决方案。
编辑1
看来只有当我选择 SQL Server Native Client 11.0 作为提供程序时才会出现此问题。当我选择Microsoft OLE DB Provider for SQL Server
时,没有任何问题,一切工作正常。
有没有办法让 native 客户端表现良好并返回所需的连接字符串?
我测试的操作系统是Windows 8.1
编辑2
我尝试按照评论中的建议设置属性 persistant security info=true ,但是在使用 native 客户端时会再次恢复,但在使用 OLE DB 客户端时不会恢复
编辑3
我按照评论中的建议,通过创建一个扩展名为 .udl 的文本文件并双击它来尝试它。结果是相同的,它适用于 OLE DB 提供程序,但不适用于 native 客户端
最佳答案
关键是Persist Security Info=True
(顺便说一句,出于安全原因,不建议这样做)。 Native Client 10/11 的问题是,在数据链接对话框中对用户名或密码进行的任何更改都会将 Persist Security Info
重置为 False
。
因此,在更改用户名/密码并将Persist Security Info
更改为True之后,您必须进入
.您可能会看到一个信息对话框,指出不建议保存未加密的密码。All
选项卡
关于delphi - Delphi 7 中的 PromptDataSource 给出了与之前不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41750423/