将数据库连接字符串提供程序名称映射到 dll

Map database connection string provider name to dll

我正在查看 SQL 服务器连接字符串。它看起来像这样:

Data Source=xxxxxxxx;Initial Catalog=xxxxxxxx;Provider=SQLNCLI11.1;Integrated Security=SSPI

我的问题是:提供程序名称(通常)如何映射到特定的 DLL 或库?

这是第二个示例(针对 Oracle):

Data Source=xxxxxxxx;User ID=xxxxxxxx;Provider=OraOLEDB.Oracle.1;Persist Security Info=True;

同样的问题。如何从提供者名称获取代码所在的dll或库?

dll 路径存储在注册表中提供程序 (GUID) 的 inprocserver32 (HKEY_CLASSES\CLSID)

foreach ($provider in [System.Data.OleDb.OleDbEnumerator]::GetRootEnumerator())
{
    $v = New-Object PSObject        
    for ($i = 0; $i -lt $provider.FieldCount; $i++) 
    {
        Add-Member -in $v NoteProperty $provider.GetName($i) $provider.GetValue($i)
    }
    $reg = Get-ItemProperty "Registry::HKEY_CLASSES_ROOT\CLSID$($v.SOURCES_CLSID)\InprocServer32" -ErrorAction SilentlyContinue
    Add-Member -in $v "Dll path" $reg.'(default)'

    $v
}