Sql server 2008 PromptDataSource和密码
我使用PromptDataSource允许用户设置数据库连接Sql server 2008 PromptDataSource和密码,sql-server-2008,delphi,delphi-2010,adodb,sql-server-native-client,Sql Server 2008,Delphi,Delphi 2010,Adodb,Sql Server Native Client,我使用PromptDataSource允许用户设置数据库连接 connectionString := ADOdb.PromptDataSource(0, ''); 但是,在使用SQL Server本机客户端10.0提供程序时,我无法使用“允许保存密码”: ConnectionString := PromptDataSource(Application.Handle, ConnectionString); if ContainsText(ConnectionString, 'SQLNCLI10'
connectionString := ADOdb.PromptDataSource(0, '');
但是,在使用SQL Server本机客户端10.0提供程序时,我无法使用“允许保存密码”:
ConnectionString := PromptDataSource(Application.Handle, ConnectionString);
if ContainsText(ConnectionString, 'SQLNCLI10') or ContainsText(ConnectionString, 'SQLNCLI11') then
begin
ConnectionString := StringReplace(ConnectionString, 'Integrated Security="";', '', [rfReplaceAll, rfIgnoreCase]);
end;
使用该提供程序时,PromptDataSource返回一个Persist Security Info=False的字符串,密码将被忽略:
ConnectionString := PromptDataSource(Application.Handle, ConnectionString);
if ContainsText(ConnectionString, 'SQLNCLI10') or ContainsText(ConnectionString, 'SQLNCLI11') then
begin
ConnectionString := StringReplace(ConnectionString, 'Integrated Security="";', '', [rfReplaceAll, rfIgnoreCase]);
end;
提供者=SQNCLI10.1;综合安全=;持久安全信息=False;用户ID=MGH;初始目录=;数据源=stackoverflow.com;初始文件名=;服务器SPN=
我尝试过的其他提供商也在工作,我能做些什么来解决这个问题
注意:我相信提供程序是与MS SQL Server 2008 R2一起安装的 编辑:我忘了包括我的答案:无法完成
这不是你想听到的答案,但我猜这是一个故意的错误,你不会说服微软去修复它
我可以确认用户提供的密码适用于:
Microsoft.Jet.OLEDB.4.0:Microsoft Jet 4.0 OLE DB提供程序可以正常工作
MSOLAP:AnalysisServices 10.0的Microsoft OLE DB提供程序
MSDASQL:ODBC驱动程序的Microsoft OLE DB提供程序
MSDAORA:Oracle works的Microsoft OLE DB提供程序
SQLOLEDB:SQLServer的Microsoft OLE DB提供程序
MSDataShape:MSDataShape有效
SQLNCLI:SQLServer本机客户端与2005一起发布
失败
SQLNCLI10:SQL Server本机客户端10.0与2008一起发布失败
SQLNCLI11:SQL Server本机客户端11.0与2012一起发布失败
看起来微软的默认策略又被打破了
额外阅读
更多微软的默认损坏的东西:
编辑:我忘了包括我的答案:无法完成
这不是你想听到的答案,但我猜这是一个故意的错误,你不会说服微软去修复它
我可以确认用户提供的密码适用于:
Microsoft.Jet.OLEDB.4.0:Microsoft Jet 4.0 OLE DB提供程序可以正常工作
MSOLAP:AnalysisServices 10.0的Microsoft OLE DB提供程序
MSDASQL:ODBC驱动程序的Microsoft OLE DB提供程序
MSDAORA:Oracle works的Microsoft OLE DB提供程序
SQLOLEDB:SQLServer的Microsoft OLE DB提供程序
MSDataShape:MSDataShape有效
SQLNCLI:SQLServer本机客户端与2005一起发布
失败
SQLNCLI10:SQL Server本机客户端10.0与2008一起发布失败
SQLNCLI11:SQL Server本机客户端11.0与2012一起发布失败
看起来微软的默认策略又被打破了
额外阅读
更多微软的默认损坏的东西:
像往常一样填写完“数据处理”对话框后,转到“数据处理属性”最后一个选项卡“全部”,并将扩展属性填写到 可信_连接=否;服务器=。。。。。。。。。。;数据库= 并将安全信息也保留为True,如果未作为默认本机客户端10和11填充为True,则在每次密码更改后将其自身填充为False。使用此代码或其他等效语言后,因为带有空字符串值的集成安全性对于本机客户端提供程序是错误的属性:
ConnectionString := PromptDataSource(Application.Handle, ConnectionString);
if ContainsText(ConnectionString, 'SQLNCLI10') or ContainsText(ConnectionString, 'SQLNCLI11') then
begin
ConnectionString := StringReplace(ConnectionString, 'Integrated Security="";', '', [rfReplaceAll, rfIgnoreCase]);
end;
像往常一样填写完“数据处理”对话框后,转到“数据处理属性”最后一个选项卡“全部”,并将扩展属性填写到 可信_连接=否;服务器=。。。。。。。。。。;数据库= 并将安全信息也保留为True,如果未作为默认本机客户端10和11填充为True,则在每次密码更改后将其自身填充为False。使用此代码或其他等效语言后,因为带有空字符串值的集成安全性对于本机客户端提供程序是错误的属性:
ConnectionString := PromptDataSource(Application.Handle, ConnectionString);
if ContainsText(ConnectionString, 'SQLNCLI10') or ContainsText(ConnectionString, 'SQLNCLI11') then
begin
ConnectionString := StringReplace(ConnectionString, 'Integrated Security="";', '', [rfReplaceAll, rfIgnoreCase]);
end;
我已将“所有”选项卡中的“持久化安全信息”更改为True和 在那里设置密码。之后我保存了密码
我将所有选项卡中的持久安全信息更改为True和 在那里设置密码。之后我保存了密码
我仍然希望通过API调用该对话框可以解决这个问题。天哪,我还以为这是一个简单的API。现在看,;强制用户只允许选择SQLOLEDB是一种可以接受的解决方法吗?因为您可以将用户的选择限制为指定的progid,例如仅SQLOLEDB。我希望允许使用提供程序,所以我将使用另一个选项来提供密码并修补连接字符串。我仍然希望通过API调用该对话框可以解决此问题。天哪,我还以为这是一个直接的API。现在看,;强制用户只允许选择SQLOLEDB是一种可以接受的解决方法吗?因为您可以将用户的选择限制为指定的progid,例如仅SQLOLEDB。我希望允许使用提供程序,所以我将使用另一个选项来提供密码并修补ConnectionString。