如何正确配置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
相关产品推荐
相关产品推荐

