如何通过OdbcConnection识别ODBC DSN的数据库驱动类型?
如何通过ODBC连接识别数据库驱动/类型
可以通过以下几种方式获取ODBC DSN的驱动类型或数据库类型,从而适配对应的日期时间函数:
1. 利用OdbcConnection.GetSchema获取驱动信息
连接打开后,调用GetSchema("Driver")可获取驱动的元数据,通过驱动名称判断数据库类型:
try { using (var connection = new OdbcConnection("DSN=" + DSN)) { connection.Open(); // 获取驱动信息表 DataTable driverTable = connection.GetSchema("Driver"); string driverName = driverTable.Rows[0]["DRIVER_NAME"].ToString(); // 根据驱动名称匹配数据库类型 if (driverName.Contains("SQL Server")) { // SQL Server 适用 GETDATE() string insertSql = "INSERT INTO YourTable (CreateTime) VALUES (GETDATE())"; // 执行SQL的逻辑 } else if (driverName.Contains("MySQL")) { // MySQL 适用 NOW() 或 CURRENT_TIMESTAMP string insertSql = "INSERT INTO YourTable (CreateTime) VALUES (NOW())"; // 执行SQL的逻辑 } // 可扩展其他数据库(如Oracle、PostgreSQL等)的判断 } } catch (Exception ex) { Logger.WriteError(ex.Message); }
2. 通过数据源信息获取数据库产品名称
使用GetSchema("DataSourceInformation")直接获取数据库的产品名称,判断更精准:
// 连接打开后执行 DataTable dsInfo = connection.GetSchema("DataSourceInformation"); string productName = dsInfo.Rows[0]["DBMS_NAME"].ToString(); switch (productName) { case "Microsoft SQL Server": // 使用 GETDATE() break; case "MySQL": // 使用 NOW() break; // 其他数据库产品名称的判断 }
3. 读取Windows注册表获取DSN配置(无需打开连接)
针对Windows系统的DSN,可直接从注册表读取驱动路径,通过驱动文件名判断类型:
using Microsoft.Win32; using System.IO; string dsnName = "YourTargetDSN"; RegistryKey dsnRegistryKey = Registry.LocalMachine.OpenSubKey($"SOFTWARE\\ODBC\\ODBC.INI\\{dsnName}"); if (dsnRegistryKey != null) { string driverPath = dsnRegistryKey.GetValue("Driver").ToString(); string driverFileName = Path.GetFileName(driverPath); if (driverFileName.Equals("SQLSRV32.dll", StringComparison.OrdinalIgnoreCase)) { // 对应SQL Server驱动 } else if (driverFileName.Equals("myodbc8w.dll", StringComparison.OrdinalIgnoreCase)) { // 对应MySQL驱动 } dsnRegistryKey.Close(); }
注意事项
- 驱动名称可能存在版本差异(如MySQL驱动可能显示为
MySQL ODBC 8.0 Unicode Driver),使用Contains模糊匹配比精确匹配更可靠。 - 不同ODBC驱动返回的元数据字段可能略有不同,测试时可先打印DataTable的所有内容确认字段名称。
- 注册表读取方式仅适用于Windows系统,且程序需要具备访问注册表的权限。
内容的提问来源于stack exchange,提问作者Pradeep Patel
相关产品推荐
相关产品推荐

