【发布时间】:2021-10-12 02:50:12
【问题描述】:
我有一个 .NET 核心作为基础镜像的 docker 容器。我在app 下安装了几个 CSV 文件,我正在尝试通过建立OdbcConnection 来读取它们。
我已经安装了以下
unixODBC msodbcsql17 mssql-tools
这是我目前拥有的
fileSource = "/app/DataStore/FolderForCsvs";
string conSt = string.Format("Driver={{Microsoft Access Text Driver (*.txt, *.csv)}};Dbq={0};Extensions=asc,csv,tab,txt", fileSource);
var connectionString = new OdbcConnection(conSt);
string query = string.Format("SELECT * FROM `{0}`", tableName);
using (var odbcConnection = connectionString)
{
odbcConnection.Open(); // errror
using (var odbcCommand = new OdbcCommand(query, odbcConnection))
{
var dataReader = odbcCommand.ExecuteReader(CommandBehavior.CloseConnection);
while (dataReader.Read())
{
Console.WriteLine("Inside");
}
}
}
我收到错误:
---> System.Exception: Exception in row row insert
---> System.Data.Odbc.OdbcException (0x80131937): ERROR [01000] [unixODBC][Driver Manager]Can't open lib 'Microsoft Access Text Driver (*.txt, *.csv)' : file not found
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection connection, OdbcConnectionString constr, OdbcEnvironmentHandle environmentHandle)
at System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection, OdbcConnectionString connectionOptions)
at System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
以下是我的 odbc 设置:
[root@d5dc11d8c347 app]# odbcinst -j
unixODBC 2.3.7
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
[root@d5dc11d8c347 app]# cat /etc/odbcinst.ini
[ODBC Driver 11 for SQL Server]
Description=Microsoft ODBC Driver 11 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0
Threading=1
UsageCount=1
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1
UsageCount=1
我不太确定 odbc 设置应该如何。有人可以帮我解决这个问题吗?
【问题讨论】:
-
为什么,当您无需数据库驱动程序即可将它们作为文件读取时,使用数十种流行的 csv 读取库中的任何一种,甚至是 file.readlines 和字符串拆分,如果您绝望/他们'很简单
-
@CaiusJard 谢谢。是的,这是我采取的第一条路径,不幸的是,在将数据加载到 DataTable 以获取可为空的 GUID 时,我在使用 CsvHelper 时遇到了问题。我想我会尝试这种方式,以便将所有内容都作为可以批量插入的字符串。
-
您问过关于可空 guid 问题的问题吗?将这些指南作为字符串读取怎么样?或者编写自己的值转换器(很容易做到)
-
是的,我做到了 (github.com/JoshClose/CsvHelper/discussions/1874)。您介意详细说明价值转换器吗?我想试试看。
-
我回答了你之前的问题
标签: c# sql-server csv odbc