定义 OleDbCommand Return 类型

Defining OleDbCommand Return Type

我正在使用下面的 OleDbCommand 多次读取文件方法。我遇到的问题是,大多数时候它 returning 数据类型为字符串,但偶尔(取决于正在读取的数据)它 returning int 类型。有没有一种方法可以将所有列 return 请求为字符串,而无需在加载后转换所有内容?

static DataTable GetDataTableFromCsv(string path, bool isFirstRowHeader)
    {
        string header = isFirstRowHeader ? "Yes" : "No";

        string pathOnly = Path.GetDirectoryName(path);
        string fileName = Path.GetFileName(path);

        string sql = @"SELECT * FROM [" + fileName + "]";

        using (OleDbConnection connection = new OleDbConnection(
                  @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathOnly +
                  ";Extended Properties=\"Text;HDR=" + header + "\""))
        using (OleDbCommand command = new OleDbCommand(sql, connection))
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
        {
            DataTable dataTable = new DataTable();
            dataTable.Locale = CultureInfo.CurrentCulture;
            adapter.Fill(dataTable);

            return dataTable;
        }
    }

如果有必要使用 OleDbCommand 执行此操作,那么您可以使用 OleDbDataReader 而不是 DataTable 并使用 GetObject.[=20 读取每个值=]

然后您可以对任何值调用 ToString()

但是,如果您有一个包含未类型化数据的 CSV 文件,那么每次只读取文件一行并拆分值,创建一个 List<string[]> 可能会容易得多。

This answer 展示了读取 .csv 文件并拆分每一行的最简单方法。

This answer 显示了如果值在不分隔值的引号内包含逗号时如何执行此操作,例如 this,are,separate,"this,is,one"