【问题标题】:How to test the version of Mysql ODBC driver programmatically如何以编程方式测试 Mysql ODBC 驱动程序的版本
【发布时间】:2016-12-07 09:31:51
【问题描述】:

我正在使用 asp (vbscript) 连接到 mysql,但我不知道 ODBC 驱动程序的版本。我无权访问服务器管理和 Windows 注册表,所以:

1- 我想以编程方式查找 ODBC 的版本(或者可能通过 phpmyadmin 中的 sql 命令?)。

2- 但是,作为一种可能的解决方案,我认为遍历各种连接字符串可能会有所帮助。如何传递错误并找到合适的连接字符串?连接字符串是否有任何回调或 False/True 返回?

可能的连接字符串:

    set objcon = Server.CreateObject ("ADODB.Connection")    
    objcon.connectionstring = "Driver={MySQL ODBC 5.2 UNICODE Driver};Server=****;Database=****;User=****;Password=****;Option=3;"
    objcon.connectionstring = "Driver={MySQL ODBC 5.1 Driver};Server=****;Database=****;User=****;Password=****;Option=3;"
    objcon.connectionstring = "Driver={MySQL ODBC 3.51 Driver};Server=****;Database=2558_academy;User=****;Password=****;Option=3;"

【问题讨论】:

  • 您是否已经通过 winmgmt 尝试了带有注册表的解决方案?据我所知,这不需要提升权限,只需要注册表的只读权限。

标签: mysql vbscript odbc


【解决方案1】:
set filepath=%~f1
set  file=%filepath:\=\\%
wmic datafile where name^="%file%" get version|findstr /i /v /c:"version"
echo %errorlevel%

使用 WMI 的批处理文件,任何 COM 语言都可以使用。将驱动程序文件作为参数传递给批处理文件。

【讨论】:

    【解决方案2】:

    如果您想在不确切了解已安装驱动程序的情况下连接到 MySQL 数据库,您应该遍历可能的连接字符串列表并尝试它们,直到它们中的第一个成功。

    拥有一个打开的连接,您可以解析连接字符串或使用连接的合适属性。

    在代码中:

       Dim oCnct : Set oCnct = CreateObject("ADODB.Connection")
      Dim sDrv
      For Each sDrv In Split("Complete nonsense|MySQL ODBC 5.1 Driver|MySQL ODBC 9.9 Driver", "|")
          WScript.Echo sDrv
         On Error Resume Next
          oCnct.Open Replace("Driver={§};Server=gent;Database=pi;User=pa;Password=po;Option=3;", "§", sDrv)
          If 0 = Err.Number Then
             Exit For
          Else
             WScript.Echo "Error:", Err.Description
          End If
         On Error Goto 0
      Next
      If oCnct.State = adStateOpen Then
         WScript.Echo "Connected to MySQL using", sDrv
         Dim sProp
         For Each sProp In Split("Driver Version|Driver ODBC Version", "|")
             WScript.Echo oCnct.Properties(sProp).Name & ":", oCnct.Properties(sProp).Value
         Next
         oCnct.Close
      Else
         WScript.Echo "Failed to connected to MySQL"
      End If
    

    输出:

    Complete nonsense
    Error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
    MySQL ODBC 5.1 Driver
    Connected to MySQL using MySQL ODBC 5.1 Driver
    Driver Version: 05.01.0005
    Driver ODBC Version: 03.51
    

    【讨论】:

      【解决方案3】:

      虽然您可能无法打开注册表,但您可以通过 winmgmts 服务进行查询。您可以根据自己的喜好进行修改...让我知道它是否有效。否则可能会有

      for each key in split("SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers,x86|SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\ODBC Drivers,x64", "|")
          strKeyPath=split(key, ",")(0)
          arch=split(key, ",")(1)
          Set objRegistry = GetObject("winmgmts:\\.\root\default:StdRegProv")
          objRegistry.EnumValues &H80000002, strKeyPath, arrValueNames, arrValueTypes
          For i = 0 to UBound(arrValueNames)
              strValueName = arrValueNames(i)
              objRegistry.GetStringValue &H80000002,strKeyPath,strValueName,strValue
              Wscript.Echo "[" & arch & "] "& strValue & " " & arrValueNames(i) 
          Next
      Next
      

      如果您在文件系统中提供了有关连接器本身安装的更多信息,也可能更容易以编程方式检测。

      C:\Windows\System32\odbcad32.exe - GUI tool for seeing the drivers
      cd /d "C:\Program Files"
      dir /s /b *odbc*dll | find /I "MySQL"
      

      一旦为 MySQL 找到正确的 odbc dll,您通常可以从文件夹路径中 readme.txt 文件的第一行抓取驱动程序版本。

      【讨论】:

        猜你喜欢
        • 2019-03-23
        • 2017-01-09
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        • 2013-06-28
        • 2014-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多