如何检查系统中安装的msoledbsql驱动程序(在Delphi 5中)

如何检查系统中安装的msoledbsql驱动程序(在Delphi 5中),delphi,driver,Delphi,Driver,我的目的是在Delphi5中使用新的MicrosoftOLEDBdriverforSQLServer(msoledbsql)进行数据库连接,如果它安装在系统中的话。如果未安装,则我使用的是旧驱动程序(sqloledb)。 我的问题是:检查系统中安装的驱动程序的正确方法是什么? 我猜这与注册表检查以及文件夹中存在的一些DLL有关。我知道如何检查DLL,但我不确定注册表。您可以使用 这将使用所有已安装提供程序的列表填充TStrings。我假设它是在1999年为Delphi5首次创建ADODB.pas

我的目的是在Delphi5中使用新的MicrosoftOLEDBdriverforSQLServer(msoledbsql)进行数据库连接,如果它安装在系统中的话。如果未安装,则我使用的是旧驱动程序(sqloledb)。 我的问题是:检查系统中安装的驱动程序的正确方法是什么? 我猜这与注册表检查以及文件夹中存在的一些DLL有关。我知道如何检查DLL,但我不确定注册表。

您可以使用

这将使用所有已安装提供程序的列表填充TStrings。我假设它是在1999年为Delphi5首次创建ADODB.pas时添加的,但我无法确认这一点

这是我之前准备的一个

Providers := TStringList.Create;
try
  GetProviderNames(Providers);
  if Providers.IndexOf('MSOLEDBSQL') >= 0 then
    ConnectionString := 'Provider=MSOLEDBSQL.1;'
  else
    ConnectionString := 'Provider=SQLNCLI11.1;';
finally
  Providers.Free;
end;
如果不是,请看一个C#示例。这是相当简单的COM处理

您可以使用

这将使用所有已安装提供程序的列表填充TStrings。我假设它是在1999年为Delphi5首次创建ADODB.pas时添加的,但我无法确认这一点

这是我之前准备的一个

Providers := TStringList.Create;
try
  GetProviderNames(Providers);
  if Providers.IndexOf('MSOLEDBSQL') >= 0 then
    ConnectionString := 'Provider=MSOLEDBSQL.1;'
  else
    ConnectionString := 'Provider=SQLNCLI11.1;';
finally
  Providers.Free;
end;

如果不是,请看一个C#示例。COM处理相当简单

请注意,MSOLEDBSQL(和SQLNCLI11)在某些方面与sqloledb不同。我们遇到了一些问题,它在方法上调用sp_descripe_first_result_set,而不是不推荐的set,以获得结果列结构。当与使用select SCOPE_IDENTITY()作为同一语句一部分的某些insert查询一起使用时(使用
qry.Open()
而不是
qry.ExecSQL
时,它在某些具有复杂触发器的表上失败。请注意,MSOLEDBSQL(和SQLNCLI11)做一些与sqloledb不同的事情。我们遇到了一些问题,它调用sp_descripe_first_result_set而不是不推荐的set FMTONLY ON方法来获取结果列结构。当与一些使用select SCOPE_IDENTITY()作为同一语句的一部分的插入查询一起使用时(使用
qry.Open()
而不是
qry.ExecSQL
它在一些具有复杂触发器的表上失败了。是的,这正是我所需要的。不知何故,我在链接问题中错过了相同的答案。谢谢!不幸的是,最好的答案不是最好的答案我是指第一个答案是的,这正是我所需要的。不知何故,我在链接问题中错过了相同的答案问题。谢谢!不幸的是,最好的答案不是最好的答案。我指的是第一个答案