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

如何在.NET Core Docker容器中使用OdbcConnection读取CSV文件

问题根因

你当前安装的msodbcsql17是微软SQL Server专用的ODBC驱动,仅用于连接SQL Server数据库,代码中调用的Microsoft Access Text Driver是Windows平台独占的驱动,Linux环境下没有官方移植版本,所以会报驱动找不到的错误。


解决方案

方案1:使用Linux平台支持的CSV ODBC驱动

如果必须保留ODBC调用的代码逻辑,可以替换为Linux可用的CSV ODBC驱动,操作步骤如下:

  1. 安装对应驱动,以Debian/Ubuntu系基础镜像为例,执行安装命令:
apt update && apt install -y odbc-csv

如果是RHEL/CentOS系镜像,使用命令:

yum install -y csvodbc
  1. 修改/etc/odbcinst.ini,新增CSV驱动配置项:
[CSV ODBC Driver]
Description = ODBC driver for CSV files
Driver = /usr/lib/x86_64-linux-gnu/odbc/libcsvodbc.so
UsageCount = 1

注意:驱动路径根据实际安装位置调整,可以执行find / -name libcsvodbc.so查找系统中实际的驱动文件路径
3. 修改C#代码中的连接字符串,替换为新增的驱动名称:

string conSt = string.Format("Driver={{CSV ODBC Driver}};Dbq={0};Extensions=csv", fileSource);

方案2:替换为原生.NET CSV读取库(更推荐)

不需要调整系统ODBC配置,无跨平台依赖问题,性能更优,推荐使用CsvHelper这类成熟的.NET CSV处理库,操作步骤如下:

  1. 安装NuGet包:
dotnet add package CsvHelper
  1. 替换原有读取逻辑,示例代码:
using CsvHelper;
using System.Globalization;
using System.IO;

var csvFilePath = Path.Combine(fileSource, $"{tableName}.csv");
using (var reader = new StreamReader(csvFilePath))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
    var records = csv.GetRecords<dynamic>();
    foreach (var record in records)
    {
        Console.WriteLine("Inside");
        // 直接通过record.字段名即可读取对应列的值
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:54:03