2

PromptDataSource用来允许用户设置数据库连接。

connectionString := ADOdb.PromptDataSource(0, '');

但是,在使用SQL Server Native Client 10.0提供程序时,我无法使用“允许保存密码”

在此处输入图像描述

PromptDataSource使用该提供程序时,返回带有 的字符串Persist Security Info=False,并省略密码:

Provider=SQNCLI10.1;Integrated Security="";Persist Security Info= False ;User ID=MGH;Initial Catalog="";Data Source=stackoverflow.com;Initial File Name="";Server SPN=""

我尝试过的其他提供程序有效,我该怎么做才能解决这个问题?

注意:我相信提供程序是随 MS SQL Server 2008 R2 一起安装的。

4

3 回答 3

4

编辑:我忘了包括我的答案:无法完成

不是你想听到的答案,但我猜这是一个故意的错误 - 你不会说服微软修复它。


我可以确认用户提供的密码适用于:

  • Microsoft.Jet.OLEDB.4.0:Microsoft Jet 4.0 OLE DB 提供程序(有效)
  • MSOLAP : Microsoft OLE DB Provider for Analysis Services 10.0 (works)
  • MSDASQL:用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序(有效)
  • MSDAORA : Microsoft OLE DB Provider for Oracle (works)
  • SQLOLEDB:用于 SQL Server 的 Microsoft OLE DB 提供程序(有效)
  • MSDataShape:MSDataShape (工作)
  • SQLNCLI:SQL Server Native Client (工作)(2005 年发布)

失败_

  • SQLNCLI10:SQL Server Native Client 10.0 (失败)(2008 年发布)
  • SQLNCLI11:SQL Server Native Client 11.0 (失败)(2012 年发布)

看起来微软的默认策略又被打破了。

奖金阅读

更多微软默认的东西:

于 2013-06-13T14:36:28.063 回答
0

像往常一样填写数据对话框后,转到数据属性最后一个选项卡“全部”并填写“扩展属性”到

Trusted_Connection=no;Server=........;Database=.......

并将“持久安全信息”也设置为“真”,如果默认情况下未填充为真(本机客户端 10 和 11 在每次更改密码后自行将其填充为假)。在使用此代码(或其他语言等效项)之后,因为具有空字符串值的“集成安全性”对于本机客户端提供程序来说是错误的属性:

ConnectionString := PromptDataSource(Application.Handle, ConnectionString);
if ContainsText(ConnectionString, 'SQLNCLI10') or ContainsText(ConnectionString, 'SQLNCLI11') then
begin
 ConnectionString := StringReplace(ConnectionString, 'Integrated Security="";', '', [rfReplaceAll, rfIgnoreCase]);
end;
于 2018-07-20T15:31:55.287 回答
0

我将“全部”选项卡中的“持久安全信息”更改为 True 并在那里设置密码。之后我保存了密码 在此处输入图像描述

于 2021-02-12T13:00:51.203 回答