You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确配置C# .NET通过ODBC连接Azure Databricks Warehouse

解决C# .NET控制台连接Azure Databricks Warehouse的ODBC错误

核心问题分析

报错System.Data.Odbc.OdbcException: Data source not found and no default driver specified本质是驱动不匹配、连接字符串格式错误,或DSN配置无效导致的。以下是针对性解决步骤:

1. 匹配ODBC驱动与.NET应用位数

  • 打开项目属性 → 生成 → 平台目标,选择x64或x86,必须与你安装的Databricks ODBC驱动位数完全一致(64位驱动对应x64,32位对应x86)。
  • 验证驱动:打开对应位数的ODBC数据源管理器(64位:C:\Windows\System32\odbcad32.exe;32位:C:\Windows\SysWOW64\odbcad32.exe),在「驱动程序」标签页确认能看到「Databricks ODBC Driver」。

2. 修正无DSN连接字符串格式

原连接字符串格式不符合System.Data.Odbc要求,需明确指定驱动及完整认证参数,示例如下:

string connectionString = @"Driver={Databricks ODBC Driver};Server=adb-6817616643364.19.azuredatabricks.net;Port=443;HTTPPath=/sql/1.0/warehouses/827c2f60de39fa0e;SSL=1;AuthMech=3;UID=token;PWD=你的Databricks个人访问令牌";

注意:

  • Driver的值必须与ODBC驱动列表中的名称完全一致(大小写敏感)。
  • PWD替换为你在Databricks生成的个人访问令牌(需有仓库访问权限)。

3. 确保DSN配置有效

若使用DSN方式:

  • 在对应位数的ODBC数据源管理器中,找到databricksfiledsn,点击「配置」并测试连接,确认能成功连接到Databricks Warehouse。
  • 检查DSN中的参数:服务器地址、HTTP路径、认证方式(AuthMech=3对应令牌认证)、令牌是否正确配置。

4. 优化代码冗余

using语句会自动释放资源,无需手动调用Close()方法,简化后的代码示例:

using System;
using System.Data;
using System.Data.Odbc;

namespace DatabricksJdbcExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 方式1:直接使用完整连接字符串
            string connectionString = @"Driver={Databricks ODBC Driver};Server=adb-6817616643364.19.azuredatabricks.net;Port=443;HTTPPath=/sql/1.0/warehouses/827c2f60de39fa0e;SSL=1;AuthMech=3;UID=token;PWD=你的个人访问令牌";
            
            // 方式2:使用已配置的有效DSN
            // string connectionString = "DSN=databricksfiledsn";

            using (OdbcConnection connection = new OdbcConnection(connectionString))
            {
                connection.Open();
                using (OdbcCommand command = new OdbcCommand("SELECT * FROM hive_metastore.demos_dlt_loans_eugene_goldberg117.historical_txs", connection))
                using (OdbcDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                            Console.Write(reader.GetValue(i) + "\t");
                        }
                        Console.WriteLine();
                    }
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Eugene Goldberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:10:33